题目描述
每次过年,小白要跟着父母到亲戚家去拜年。小白家是个大家族,近百个亲戚分布在全世界。小白从冬令营回来,想编一个程序统计自己到底有多少亲戚。
输入
第一行:3个整数n,k,h。n表示有1~n个人,k个关系,统计编号为h的人有多少亲戚。n,k,h均小于等于1000。
输出
一个整数,亲戚数。
样例输入
样例一:
5 3 4
1 2
1 3
4 5
样例二:
5 3 3
1 2
1 3
4 5
5 3 4
1 2
1 3
4 5
样例二:
5 3 3
1 2
1 3
4 5
样例输出
样例1:
1
样例2:
2
1
样例2:
2
提示
(说明,4号有一个亲戚5号;3号有两个亲戚,分别是1和2)
来源
#include<cstdio>
using namespace std;
int n,m,h,x,p[ 1010];
void Make(){ for( int i= 1;i<=n;i++)p[i]=i;}
int Find( int x){ return x==p[x]?x:(p[x]=Find(p[x]));}
void Union( int x, int y){
if(Find(x)==h){ p[Find(y)]=h; return; }
if(Find(y)==h){ p[Find(x)]=h; return; }
p[Find(x)]=Find(y);
}
int main(){
scanf( " %d%d%d ",&n,&m,&h);
Make();
while(m--){
int x,y;
scanf( " %d%d ",&x,&y);
Union(x,y);
}
x= 0;
for( int i= 1;i<=n;i++)
if(Find(i)==h)x++;
printf( " %d\n ",x- 1);
return 0;
}
using namespace std;
int n,m,h,x,p[ 1010];
void Make(){ for( int i= 1;i<=n;i++)p[i]=i;}
int Find( int x){ return x==p[x]?x:(p[x]=Find(p[x]));}
void Union( int x, int y){
if(Find(x)==h){ p[Find(y)]=h; return; }
if(Find(y)==h){ p[Find(x)]=h; return; }
p[Find(x)]=Find(y);
}
int main(){
scanf( " %d%d%d ",&n,&m,&h);
Make();
while(m--){
int x,y;
scanf( " %d%d ",&x,&y);
Union(x,y);
}
x= 0;
for( int i= 1;i<=n;i++)
if(Find(i)==h)x++;
printf( " %d\n ",x- 1);
return 0;
}