标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 30827 Accepted Submission(s):
9540
#include<stdio.h> int set[101000]; int find(int fa) { int ch=fa; int t; while(fa!=set[fa]) fa=set[fa]; while(ch!=fa) { t=set[ch]; set[ch]=fa; ch=t; } return fa; } int mix(int x,int y) { int fx,fy; fx=find(x); fy=find(y); if(fx!=fy) set[fx]=fy; } int main() { int i,s; int fang,fang1;//输入的两个点 int way;//记录到达一个节点有多少条路 while(1) { for(i=1;i<101000;i++) set[i]=0; way=0; while(scanf("%d %d",&fang,&fang1)&&(fang!=0||fang1!=0)) { if(fang==-1&&fang1==-1) return 0; if(set[fang]==0) set[fang]=fang; if(set[fang1]==0) set[fang1]=fang1; if(find(fang)==find(fang1)) //如果在合并之前就存在一条路使得 way++; //此点的根节点与当前点的根节点相同则存在多条路径 mix(fang,fang1);//合并已有路径 } if(way!=0) printf("No\n"); else { s=0; for(i=1;i<=101000;i++) { if(set[i]==i) //若存在多个根节点证明所有的房间并未全部连通 s++; } if(s>1) printf("No\n"); //输出注意大小写 else printf("Yes\n"); } } return 0; }
标签:
原文地址:http://www.cnblogs.com/tonghao/p/4448782.html