这道题我就不多说了,基本(好吧没有基本)就是一道模板题,读入+并查集+输出,完美结束
1 #include<set> 2 #include<map> 3 #include<list> 4 #include<queue> 5 #include<stack> 6 #include<string> 7 #include<cmath> 8 #include<ctime> 9 #include<vector> 10 #include<bitset> 11 #include<memory> 12 #include<utility> 13 #include<cstdio> 14 #include<sstream> 15 #include<iostream> 16 #include<cstdlib> 17 #include<cstring> 18 #include<algorithm> 19 using namespace std; 20 21 int n,m,p; 22 int zy[5005]; 23 24 int find(int z){//查找该集合的代表元 25 if(z==zy[z]){ 26 return z; 27 } 28 return zy[z]=find(zy[z]); 29 } 30 31 int main(){ 32 scanf("%d%d%d",&n,&m,&p); 33 for(int i=1;i<=n;i++){ 34 zy[i]=i; 35 } 36 for(int i=1;i<=m;i++){ 37 int z,y; 38 scanf("%d%d",&z,&y); 39 zy[find(z)]=zy[find(y)];//合并 40 } 41 for(int i=1;i<=p;i++){ 42 int z,y; 43 scanf("%d%d",&z,&y); 44 if(find(z)==find(y)){//在同一集合中 45 printf("Yes "); 46 } 47 else{ 48 printf("No "); 49 } 50 } 51 return 0; 52 }
嗯既然水题那也没什么好讲的,就这样子了