B 爱攀比的童鞋
众所周知,中国人办事总是要讲点关系,中国人的人际关系一般都相当复杂。比如说你想混ACM就最好和miaowu姐姐攀上亲戚。。。ORZ。。。既然亲戚多了好办事,我们就要构筑一个亲戚网。假如你和xuanflyer是亲戚,xuanflyer和miaowu是亲戚,以后你有什么事也可以通过xuanflyer来找miaowu了,这样一来,你和miaowu也算亲戚了。跟wuyu姐姐一样,很多童鞋比较爱慕虚荣,喜欢攀比,所以总想知道他和他亲戚里面到底谁的钱最多。
输入:对每个样例,第一行:正整数n m q(1<=n,m,q<=100000),表示有n个人,然后m行,每行输入i j,表示i和j是亲戚,然后q行,每行输入i,表示询问i和i的亲戚里面谁的钱最多。
PS:用1—n表示这n个人,第i个人有i万元。
输出:对每个询问,输出一行,输出i和i的亲戚里面谁的钱最多。
样例输入:
5 4 3
1 2
3 4
1 5
2 5
1
2
3
样例输出:
5
5
4
简单的并查集,直接套用模板,就是中间进行亲戚的钱的比较就行。
#include <stdio.h>
int pre[100010];
int find(int x)
{
int r=x;
while(pre[r]!=r)
r=pre[r];
return r;
}
int main()
{
int i,n,m,p,p1,p2,f1,f2,t;
scanf("%d%d%d",&n,&m,&p);
for(i=1;i<=n;i++)
pre[i]=i;
while(m--)
{
scanf("%d%d",&p1,&p2);
f1=find(p1);
f2=find(p2);
if(f1!=f2)
{
if(f1>f2)
pre[f2]=f1;
else
pre[f1]=f2;
}
}
while(p--)
{
scanf("%d",&t);
printf("%d\n",find(t));
}
return 0;
}