标签:记录 color acm end eof code pac scanf 编号
<题目链接>
#include <cstdio> #include <cstring> #include <iostream> #include <set> #include <algorithm> using namespace std; const int maxn=100000+100; int father[maxn]; int flag; int find(int x) { int r=x; while(father[r]!=r)r=father[r]; int i=x,j; while(father[i]!=r) { j=father[i]; father[i]=r; i=j; } return r; } void Union(int a,int b) { int f1=find(a); int f2=find(b); if(f1!=f2) { father[f2]=f1; } else //判断该无向图是否有环 { flag=1; } } int main() { int a,b; while(scanf("%d %d",&a,&b)!=EOF) { if(a==-1&&b==-1)break; if(a==0&&b==0) { printf("Yes\n"); continue; } //如果该图无点,也符合题意,所以输出Yes,这一点很难想到 set<int>s; //由于不知道它输入了哪些编号的点,所以用set记录 s.insert(a); s.insert(b); for(int i=1;i<=maxn;i++)father[i]=i; Union(a,b); flag=0; while(scanf("%d %d",&a,&b)) { if(a==0&&b==0)break; s.insert(a); s.insert(b); Union(a,b); } if(flag){ printf("No\n"); continue; } int root=0; //判断是否只有一个根节点 set<int>::iterator it; for(it=s.begin();it!=s.end();it++) { if(father[*it]==*it)root++; if(root>=2) { flag=1;break; } } if(flag)printf("No\n"); else printf("Yes\n"); } return 0; }
标签:记录 color acm end eof code pac scanf 编号
原文地址:https://www.cnblogs.com/00isok/p/9384886.html