http://acm.hdu.edu.cn/showproblem.php?pid=1272
#include<bits/stdc++.h>
using namespace std;
int n,m,p[100005];
vector<pair<int,int>>ve;
int find(int x)
{
if(x!=p[x]) p[x]=find(p[x]);
return p[x];
}
int main(void)
{
while(cin>>n>>m)
{
ve.push_back({n,m});
if(!n&&!m)
{
bool flag=true;
map<int,int>mp;
for(int i=0;i<ve.size()-1;i++)
{
int a=ve[i].first,b=ve[i].second;
p[a]=a,p[b]=b;
mp[a]++,mp[b]++;
}
int cnt=mp.size();
for(int i=0;i<ve.size()-1;i++)
{
int a=ve[i].first,b=ve[i].second;
if(find(a)!=find(b)) p[find(b)]=find(a),cnt--;
else
{
flag=false;
break;
}
}
if(!flag || cnt>1 ) puts("No");
else puts("Yes");
ve.clear();
}
if(n==-1&&m==-1) break;
}
return 0;
}