标签:iostream sed 题目 pac 技术分享 include show rip using
5929 亲戚
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。 输入描述 Input Description 第一行:三个整数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是否具有亲戚关系。 输出描述 Output Description P行,每行一个’Yes’或’No’。表示第i个询问的答案为“具有”或“不具有”亲戚关系。 样例输入 Sample Input 6 5 3 1 2 1 5 3 4 5 2 1 3 1 4 2 3 5 6 样例输出 Sample Output Yes Yes No 数据范围及提示 Data Size & Hint 题目中已有,不重复解释。
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 5 const int MAXN=99999; 6 int n,m,dad[MAXN],a,b,c,d,q,r1,r2; 7 8 int find(int x) 9 { 10 if(x!=dad[x]) dad[x]=find(dad[x]); 11 return dad[x]; 12 } 13 14 void unionn(int q,int p) 15 { 16 dad[r2]=r1; 17 } 18 19 int main() 20 { 21 cin>>n>>m; 22 cin>>q; 23 for(int i=1;i<=n;i++) 24 dad[i]=i; 25 for(int j=1;j<=m;j++){ 26 cin>>a>>b; 27 r1=find(a); 28 r2=find(b); 29 if(r1!=r2) 30 unionn(r1,r2); 31 } 32 for(int i=1;i<=q;i++){ 33 cin>>c>>d; 34 if(find(c)==find(d)) 35 cout<<"Yes"<<endl; 36 else 37 cout<<"No"<<endl; 38 } 39 return 0; 40 }
标签:iostream sed 题目 pac 技术分享 include show rip using
原文地址:http://www.cnblogs.com/wsdestdq/p/6701143.html