HDU1856 More is better (加权并查集)
2016-10-20 22:36
232 查看
近几天---并查集的日常:外链并查集
题意:这道题目的目的是想知道经过一系列的合并操作之后,查询在所有的子树中,秩的最大值是多少,简而言之,就是最大的那颗子树包含了多少个节点。
模板:
AC代码:
套模板,案例很快就出来了,也注意了n==0时候的特殊情况,但是连续WA,原因是输入出了问题
一开始的输入格式:
由此可以猜测java的hasNext()方法有点像c++中的cin.peek()——只是查看输入流中的内容。
题意:这道题目的目的是想知道经过一系列的合并操作之后,查询在所有的子树中,秩的最大值是多少,简而言之,就是最大的那颗子树包含了多少个节点。
模板:
import java.util.Scanner; public class Main { private int[] id; private int[] sz; private int count; public Main(int N) { count = N; id = new int[N + 1]; sz = new int[N + 1]; for (int i = 1; i <= N; i++) { id[i] = i; sz[i] = 1; } } public int count() { return count; } public boolean connected(int p, int q) { return find(p) == find(q); } public int find(int p) { while (p != id[p]) p = id[p]; return p; } public void union(int p, int q) { int i = find(p); int j = find(q); if (i == j) return; if (sz[i] < sz[j]) { id[i] = j; sz[j] += sz[i]; } else { id[j] = i; sz[i] += sz[j]; } count--; } public static void main(String[] args) { Scanner cin = new Scanner(System.in); } } </span>
AC代码:
import java.util.Scanner; public class Main { private int[] id; private int[] sz; private long maxn = 1L; public Main(int N) { id = new int[N + 1]; sz = new int[N + 1]; for (int i = 1; i <= N; i++) { id[i] = i; sz[i] = 1; } } public int find(int p) { while (p != id[p]) p = id[p]; return p; } public void union(int p, int q) { int i = find(p); int j = find(q); if (i == j) return; if (sz[i] < sz[j]) { id[i] = j; sz[j] += sz[i]; maxn = sz[j] > maxn ? sz[j] : maxn; } else { id[j] = i; sz[i] += sz[j]; maxn = sz[i] > maxn ? sz[i] : maxn; } } public static void main(String[] args) { Scanner cin = new Scanner(System.in); while (cin.hasNext()) { int n = cin.nextInt(); Main ans = new Main(10000000); int a, b; for (int i = 0; i < n; i++) { a = cin.nextInt(); b = cin.nextInt(); ans.union(a, b); } System.out.println(ans.maxn); } } }
套模板,案例很快就出来了,也注意了n==0时候的特殊情况,但是连续WA,原因是输入出了问题
一开始的输入格式:
int n = cin.nextInt(); while(cin.hasNext()){ ....... n = cin.nextInt(); }
由此可以猜测java的hasNext()方法有点像c++中的cin.peek()——只是查看输入流中的内容。
相关文章推荐
- la4487 加权并查集,异或的性质
- hdu 2545 树上战争(加权并查集)
- hdu 3234 异或(加权并查集)
- 并查集(加权) LA 4487 Exclusive-OR
- uva11987(加权并查集的删除操作)
- HDU 3234 | UValive 4487 - Exclusive-OR (加权并查集)
- codevs 1540 银河英雄传说(加权并查集)
- uva12232 - Exclusive-OR 加权并查集
- HDU 2818 Building Block 加权并查集
- POJ[1182]食物链 加权并查集
- hdu 3172 Virtual Friends(加权并查集)
- bzoj 3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦(加权并查集)
- hdu 3635 Dragon Balls(加权并查集)2010 ACM-ICPC Multi-University Training Contest(19)
- 【POJ1984】【二维加权并查集】【向量运算】【四边形法则】
- [BZOJ2303][Apio2011]方格染色(数学相关+加权并查集)
- 【数据结构笔记】8:并查集:并时加权/查后折叠
- C - Corporative Network UVA - 1329 -加权并查集
- uva 12232 - Exclusive-OR(加权并查集)
- 关押罪犯 codevs 1069(整理:加权并查集?+虚点并查集+二分图染色)
- bzoj 4602: [Sdoi2016]齿轮(加权并查集)