本文主要是介绍洛谷_1551 亲戚,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
题意:
给出n个人的亲戚关系,之后给出p对人,判断这两个人之间有没有亲属关系。
思路:
因为这是并查集的例题,所以这里用并查集,每次读入都让它们合并起来,可以压缩路径。
代码:
#include<cstdio>
int n,m,p,x,y,father[50001];
int find(int a)
{if (father[a]!=a) father[a]=find(father[a]);return father[a];
}
void unionn(int f1,int f2) {father[f2]=f1;}
int main()
{scanf("%d%d%d",&n,&m,&p);for (int i=1;i<=n;i++)father[i]=i;//刚开始自己为爸爸for (int i=1;i<=m;i++){scanf("%d%d",&x,&y);int f1=find(x),f2=find(y);//找爸爸if (f1!=f2) unionn(f1,f2);//合并}for (int i=1;i<=p;i++){scanf("%d%d",&x,&y);if (find(x)==find(y)) printf("Yes\n");else printf("No\n");}
}
这篇关于洛谷_1551 亲戚的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!