2020年1月26日
摘要: 给定一个包含n个点(编号为1~n)的无向图,初始时图中没有边。 现在要进行m个操作,操作共有三种: “C a b”,在点a和点b之间连一条边,a和b可能相等; “Q1 a b”,询问点a和点b是否在同一个连通块中,a和b可能相等; “Q2 a”,询问点a所在连通块中点的数量; 输入格式 第一行输入整 阅读全文
posted @ 2020-01-26 18:48 qdu_lkc 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 一共有n个数,编号是1~n,最开始每个数各自在一个集合中。 现在要进行m个操作,操作共有两种: “M a b”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作; “Q a b”,询问编号为a和b的两个数是否在同一个集合中; 输入格式 第一行输入整数n和m。 接下来 阅读全文
posted @ 2020-01-26 17:01 qdu_lkc 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 并查集 1.合并两个集合 2.查询两个数是否在一个集合 基本原理: 每个集合用一棵树来表示,树根的编号就是整个集合的编号,每个结点存储他的父节点,p[x]表示x的父节点 1.是否是一个集合 if( find(a)==find(b) ) 2.合并两个集合 p[find(a)]=find(b) stat 阅读全文
posted @ 2020-01-26 16:59 qdu_lkc 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 在给定的N个整数A1,A2……ANA1,A2……AN中选出两个进行xor(异或)运算,得到的结果最大是多少? 输入格式 第一行输入一个整数N。 第二行输入N个整数A1A1~ANAN。 输出格式 输出一个整数表示答案。 数据范围 1≤N≤1051≤N≤105,0≤Ai<2310≤Ai<231 输入样例 阅读全文
posted @ 2020-01-26 15:20 qdu_lkc 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 用于快速的查找一个字符串 static final int max=100005; //所有字符总数 static int son[][]=new int[max][26];//son数组存储每个节点的儿子;一维表示父节点下标,二维表示小写字母 son[x][0~25] static int cnt 阅读全文
posted @ 2020-01-26 13:01 qdu_lkc 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 维护一个字符串集合,支持两种操作: “I x”向集合中插入一个字符串x; “Q x”询问一个字符串在集合中出现了多少次。 共有N个操作,输入的字符串总长度不超过 105105,字符串仅包含小写英文字母。 输入格式 第一行包含整数N,表示操作数。 接下来N行,每行包含一个操作指令,指令为”I x”或” 阅读全文
posted @ 2020-01-26 12:55 qdu_lkc 阅读(200) 评论(0) 推荐(0) 编辑