zoj 1789 The Suspects (并查集)
2011-08-10 16:48
363 查看
并查集,一直wa,找了好长时间,才找到错误
#include<stdio.h> #include<stdlib.h> int father[30005]; int n,m,i,t,a,b,k,fa; int find(int x) { return father[x]==x?x:find(father[x]); } void Union(int x,int y) { int fx,fy; fx=find(x); fy=find(y); if(fx<fy)//当时错误就出在这里,一开始我在主函数里比较x,y的大小,但x大不代表x的根就大。最后要看每个数的根是否是0,就必须让根大的并到根小的 father[fy]=fx;//第二个错误就在这里,开始在father[]中填的x,y,这样会缺失数据,如输入2 3 7 和0 3 4输出就错误,必须让一个数的根并过去 else father[fx]=fy; } int main() { while(scanf("%d%d",&n,&m)!=EOF) { if(n==0&&m==0) break; for(i=0;i<n;i++) father[i]=i; while(m--) { scanf("%d",&t); scanf("%d",&a); for(i=1;i<t;i++) { scanf("%d",&b); Union(a,b); } } k=0; for(i=0;i<n;i++) { fa=find(i); if(fa==0) k++; } printf("%d\n",k); } return 0; }
相关文章推荐
- zoj 1789||poj 1611 The Suspects(并查集,简单)
- zoj 1789 || poj 1611 The Suspects(并查集)
- zoj 1789 The Suspects
- ACM zoj 1789(并查集实现)
- zoj 1789 The Suspects
- zoj 1789 The Suspects
- ZOJ1789(The Suspects)j简单并查集
- zoj 1789 The Suspects
- ZOJ 1789 水水的并查集,刚开始学会并查集,做了此题。经过一次失败后终于AC了哈哈~ AC感觉就是好啊!与大家共分享啊
- zoj1789(并查集)
- POJ 1611 The Suspects(带权并查集)
- ZOJ 3216(并查集)
- ZOJ 1789 The Suspects
- POJ - 1611 The Suspects (并查集)
- POJ1611(The Suspects)又见并查集
- zoj2740-简单并查集
- POJ 1611 The Suspects(并查集)
- ZOJ 3583 Simple Path[并查集]
- Poj 1611 The Suspects(并查集
- ZOJ 3261 - Connections in Galaxy War ,并查集删边