博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【vijos P1034】家族(并查集)
阅读量:5083 次
发布时间:2019-06-13

本文共 975 字,大约阅读时间需要 3 分钟。

P1034家族
标签:
 
 

描述

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

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

格式

输入格式

第一行:三个整数n,m,p,(n<=5000,m<=5000,p<=5000),分别表示有n个人,m个亲戚关系,询问p对亲戚关系。

以下m行:每行两个数Mi,Mj,1<=Mi,Mj<=N,表示Ai和Bi具有亲戚关系。

接下来p行:每行两个数Pi,Pj,询问Pi和Pj是否具有亲戚关系。

输出格式

P行,每行一个’Yes’或’No’。表示第i个询问的答案为“具有”或“不具有”亲戚关系。

样例1

样例输入1

 
6 5 31 21 53 45 21 31 42 35 6

样例输出1

 
YesYesNo

限制

各点1S

来源

cdwind整理提交

【题解】【并查集】

 

#include
using namespace std;int f[5010],n,m,q;int find(int x){ if(f[x]==x) return f[x]; return find(f[x]);}int main(){ scanf("%d%d%d",&n,&m,&q); for(int i=1;i<=n;++i) f[i]=i; for(int i=1;i<=m;++i) { int x,y; scanf("%d%d",&x,&y); int l1=find(x),l2=find(y); if(l1!=l2) f[l1]=l2; } for(int i=1;i<=q;++i) { int x,y; scanf("%d%d",&x,&y); int l1=find(x),l2=find(y); if(l1!=l2) printf("No\n"); else printf("Yes\n"); } return 0;}
[诶?这好像是一年前学并查集时做的题]

 

转载于:https://www.cnblogs.com/lris-searching/p/9402927.html

你可能感兴趣的文章
Python 集合(Set)、字典(Dictionary)
查看>>
获取元素
查看>>
proxy写监听方法,实现响应式
查看>>
第一阶段冲刺06
查看>>
十个免费的 Web 压力测试工具
查看>>
EOS生产区块:解析插件producer_plugin
查看>>
mysql重置密码
查看>>
jQuery轮 播的封装
查看>>
一天一道算法题--5.30---递归
查看>>
JS取得绝对路径
查看>>
排球积分程序(三)——模型类的设计
查看>>
python numpy sum函数用法
查看>>
php变量什么情况下加大括号{}
查看>>
linux程序设计---序
查看>>
【字符串入门专题1】hdu3613 【一个悲伤的exkmp】
查看>>
C# Linq获取两个List或数组的差集交集
查看>>
HDU 4635 Strongly connected
查看>>
ASP.NET/C#获取文章中图片的地址
查看>>
Spring MVC 入门(二)
查看>>
格式化输出数字和时间
查看>>