锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
//1264198 2009-04-12 16:58:37 Accepted 1272 31MS 1096K 1573 B C++ no way
#include<iostream>
using namespace std;
struct Node

{
long parent;
long hight;
};
Node polong[100001];
bool visited[100001];//鏍囪鏌愮偣鍑虹幇榪?/span>
long find(long x) //鏌ユ壘鏍?/span>

{
while(x != polong[x].parent)
x = polong[x].parent;
return x;
}
void merge(long a,long b)//鍚堝茍

{
if(polong[a].hight == polong[b].hight)
{
polong[a].parent = b;
polong[b].hight += 1;
}
else if(polong[a].hight > polong[b].hight)
polong[b].parent = a;
else
polong[a].parent = b;
}
long main()

{
long maxn,minn,a,b,sign,i;
while(scanf("%ld%ld",&a,&b)!=EOF)
{
if(a==-1 && b==-1)
break;
if(a==0 && b==0)
{
cout<<"Yes"<<endl;
continue;
}
for(i=1;i<=100000;i++)//娉ㄦ剰娉ㄦ剰
{
polong[i].parent = i;
polong[i].hight = 1;
visited[i] = 0;
}
maxn = 0;
minn = 100000;
sign = 0;

do
{
if(a > maxn) maxn = a;
if(b > maxn) maxn = b;
if(minn > a) minn = a;
if(minn > b) minn = b;
visited[a] = 1;
visited[b] = 1;
a = find(a);
b = find(b);
if(a == b) //鏍圭浉鍚岃〃紺烘湁鍥炶礬~
{
sign = -1;
break;
}
else
merge(a,b);
scanf("%ld%ld",&a,&b);
if(a==0 && b==0)
break;
}while(1);
if(sign == -1) //榪樻湭杈撳叆瀹?/span>
{
do
{
scanf("%ld%ld",&a,&b);
if(a==0 && b==0)
break;
}while(1);
}
if(sign == 0) //娌℃湁鍥炶礬錛屾煡鐪嬫槸鍚﹂兘鍦ㄤ竴涓泦鍚?/span>
{
for(i=minn;i<=maxn;i++)
if(visited[i] == 1 && polong[i].parent == i)
sign ++;
}
if(sign == 1)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
]]>
#include<iostream>
#include<set>
using namespace std;
struct Node

{
int parent;
int hight;
};
Node village[1001];
int find(int x) //瀵繪壘鐖朵翰

{
while(x != village[x].parent)
x = village[x].parent;
return x;
}
void merge(int a,int b)

{
if(village[a].hight == village[b].hight)//鏍戦珮涓鏍?/span>
{
village[b].parent = a;
village[a].hight += 1;
}
else if(village[a].hight > village[b].hight) //鐭爲騫跺叆楂樻爲
{
village[b].parent = a;//騫跺叆a
}
else
{
village[a].parent = b;//騫跺叆b
}
}
int main()

{
int n;
while(scanf("%d",&n) && n)
{
int m,i,j,a,b,sum = 0;
for(i=1;i<=n;i++)
{
village[i].parent = i;
village[i].hight = 1;
}
scanf("%d",&m);
while(m--)
{
scanf("%d%d",&a,&b);
a = find(a); //瀵繪壘a鐨勬牴鑺傜偣
b = find(b); //瀵繪壘b鐨勬牴鑺傜偣
if(a!=b) //鏍硅妭鐐逛笉涓鏍鋒墠鍚堝茍
merge(a,b);
}
set<int>S;
for(i=1;i<=n;i++) //鏌ユ壘鏈夊灝戜釜闆嗗悎
S.insert(find(i));
cout<<S.size()-1<<endl;
}
return 0;
}
]]>