题目大意:
给定关于n个人的m条认识关系,做p次询问,问x,y是否认识(认识关系具有传递性)?
解题思路:
并查集,初始化时,将每个节点都指向本身,将具有关系的节点的根节点合并,最后查看x和y的根节点是否相同,相同yes,不相同no。
c代码:
#include<stdio.h>
#include<string.h>
#define max 5010
int pre[max];
int find(int i)
{
if(pre[i]==i)
return i;
return find(pre[i]);
}
void sum(int i,int j)
{
int c=find(i),d=find(j);
if(c!=d)
pre[c]=d;
}
int main()
{
int n,m,p,x,y;
scanf("%d %d %d",&n,&m,&p);
for(int i=1;i<=n;i++)
pre[i]=i;
while(m--)
{
scanf("%d %d",&x,&y);
sum(x,y);
}
while(p--)
{
scanf("%d %d",&x,&y);
if(find(x)==find(y))
printf("Yes\n");
else printf("No\n");
}
return 0;
}