G++TM。。LTE。。。递归写法TMC++还爆栈
#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
using namespace std;
#define MAX 100005
int f[MAX],flag,sign[MAX];
int find(int x)
{
while(x!=f[x])
x=f[x];
return x;
}
void Union(int x,int y)
{
x=find(x);
y=find(y);
if(x!=y)
f[x]=y;
else flag=0;
}
int main()
{
int i,a,b;
while(cin>>a>>b)
{
if(a==-1&&b==-1) break;
if(a==0&&b==0)
{ cout<<"Yes"<<endl; continue; }
for(i=1;i<MAX;i++)
{
f[i]=i;
sign[i]=0;
}
sign[a]=sign[b]=1;
flag=1;
Union(a,b);
while(cin>>a>>b)
{
if(a==0&&b==0) break;
Union(a,b);
sign[a]=sign[b]=1;
}
int k=0;
for(i=1;i<MAX;i++)
{
if(sign[i]&&f[i]==i)
k++;
if(k>1) flag=0;
}
if(flag) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}