/*一道坑爹的水题,表示,你只要判断边数和点数之间的关系是不是 edge+1=node,再用并查集判断环就ac了*/ #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define maxn 100005 int fa[maxn]; bool vis[maxn]; void init() { int i; for(i=0;i<maxn;i++) fa[i]=i; } int findfather(int x) { if(x!=fa[x]) fa[x]=findfather(fa[x]); return fa[x]; } int main() { int a,b,i; int flag,edge,node; while(1) { init(); flag=1; edge=node=0; memset(vis,false,sizeof(vis)); while(scanf("%d%d",&a,&b)==2&&a!=-1&&b!=-1) { if(a==0&&b==0&&edge==0) { printf("Yes\n"); continue; } if(a==0&&b==0) break; edge++; vis[a]=vis[b]=true; if(flag) { a=findfather(a); b=findfather(b); if(a!=b) fa[a]=b; else if(a==b) flag=0; } } if(a==-1&&b==-1) break; for(i=0;i<maxn;i++) if(vis[i]) node++; if(flag&&node==edge+1) printf("Yes\n"); else printf("No\n"); } return 0; }