hdu1272——小希的迷宫
2010-09-27 23:03
381 查看
记住:空树也是树!
这道题还要考虑形成森林的情况!
这道题还要考虑形成森林的情况!
#include<stdio.h> #include<string.h> int tt[100005],num[100005],used[100005]; int find(int a) { int i,x; x=a; while(tt[x]!=x) x=tt[x]; while(a!=tt[a]) { i=tt[a]; tt[a]=x; a=i; } return x; } void unin(int a,int b) { if(num[a]>num[b]) { tt[b]=a; num[a]+=num[b]; } else { tt[a]=b; num[b]+=num[a]; } } main() { int a,b,flag,i; int f1,f2,nt; for(i=0;i<100005;i++) num[i]=1; memset(used,0,sizeof(used)); for(i=0;i<100005;i++) tt[i]=i; flag=1;nt=0; int first=0; while(scanf("%d%d",&a,&b)!=EOF) { if(a==-1&&b==-1) break; if(a==0&&b==0) { if(first==0) printf("Yes/n"); else { nt=0; for(i=0;i<100005;i++) if(used[i]&&tt[i]==i) nt++; if(flag&&nt==1) printf("Yes/n"); else printf("No/n"); } for(i=0;i<100005;i++) num[i]=1; memset(used,0,sizeof(used)); nt=0; for(i=0;i<=100004;i++) tt[i]=i; flag=1;first=0; continue; } else { first=1; f1=find(a);f2=find(b); if(used[a]==0) {used[a]=1;nt++;} if(used[b]==0) {used[b]=1;nt++;} if(f1==f2) { flag=0; } else unin(f1,f2); } } }
相关文章推荐
- hdu 1272 小希的迷宫(并查集)
- HDU 1272 小希的迷宫(并查集)
- HDU 1272 小希的迷宫
- HDU 1272 小希的迷宫
- HDU - 1272 小希的迷宫
- 【HDU 1272 小希的迷宫】
- hdu 1272 小希的迷宫(并查集)
- hdu1272 小希的迷宫 (并查集)
- HDU-1272 小希的迷宫 (并查集)
- hdu 1272 小希的迷宫
- [tree]hdu 1272 小希的迷宫
- HDU 1272 小希的迷宫 (水题)
- HDU 1272 小希的迷宫 (kruskal)
- HDU 1272 小希的迷宫
- HDU 1272小希的迷宫 1325Is It A Tree? 并查集确定图为树
- HDU 1272 小希的迷宫 + 1325 Is It A Tree? , 并查集
- hdu 1272 小希的迷宫(并查集)
- HDU 1272 小希的迷宫(并查集判断有无成环)
- HDU 1272 小希的迷宫
- [ACM] hdu 1272 小希的迷宫(并查集)