1. 判断是否成环;
2. 判断是否只有一棵树;
3.0 0 也要输出Yes#include<stdio.h>
#include<string.h>
int father[100010],s;
int vis[100010];
int find(int x){
if(x==father[x]) return x;
else father[x]=find(father[x]);
return father[x];
}
void join(int x,int y){
vis[x]=1;vis[y]=1;
int fx=find(x);
int fy=find(y);
if(fx==fy) s++;
else father[fx]=fy;
}
int main(){
int n,m,i,t,max;
while(1){
for(i=1;i<=100000;i++){
father[i]=i;
}
memset(vis,0,sizeof(vis));
scanf("%d%d",&n,&m);
if(n+m==-2) break;
if(n+m==0) printf("Yes\n");
else {
max=n>m?n:m;
join(n,m);
s=0;
while(1){
scanf("%d%d",&n,&m);
t=n>m?n:m;
if(max<t) max=t;
if(n+m==0) break;
else{
join(n,m);
}
}
for(t=0,i=1;i<=max;i++){
if(vis[i]&&father[i]==i) t++;
}
if(s==0&&t==1) printf("Yes\n");
else printf("No\n");
}
}
return 0;
}