vijos1034题解

来源:互联网 发布:淘宝男装店铺介绍范文 编辑:程序博客网 时间:2024/05/29 19:18

题目:

若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。

规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。

#include<stdio.h>using namespace std;long f[5001];long n,m,p,i,x,y;long getfather(long u){  if (f[u]==u) return u;  f[u]=getfather(f[u]);  return f[u];}void he(long u,long v){  if (f[u]==f[v]) return;  u=getfather(u);  v=getfather(v);  f[u]=v;}int main(){    scanf("%ld %ld %ld",&n,&m,&p);    for (i=1;i<=n;i++)      f[i]=i;    for (i=1;i<=m;i++)      {        scanf("%ld%ld",&x,&y);        he(x,y);      }    for (i=1;i<=p;i++)      {        scanf("%ld%ld",&x,&y);        if (getfather(x)==getfather(y))printf("Yes\n");        else printf("No\n");      }  return 0;} 


0 0
原创粉丝点击