J. 图的连通性问题-并查集
Input
本问题有多组测试数据,每组测试数据有两部分,第一部分只有一行,是两个正整数,分别表示图的节点数N(节点编号从1到N,1<=N<=100)和图的边数E;第二部分共有E行,每行也是两个整数N1,N2(1<=N1,N2<=N),分别表示N1和N2之间有一条边。
Output
对于每一组测试数据,输出只有一行,如果是连通图,那么输出“Yes”,否则输出“No”。
Sample Input
6 10 1 2 1 3 1 4 1 5 1 6 2 3 2 4 3 4 3 5 3 6 4 3 1 2 1 3 2 3
Sample Output
Yes No
#include <bits/stdc++.h> using namespace std; int a[101]; int searchfa(int x); int main() { int n,s; while(cin>>n>>s) { int cnt=0,f; for(int i=1;i<=n;i++) { a[i]=i; } for(int i=1;i<=s;i++) { int p1,p2; cin>>p1>>p2; int p1f,p2f; p1f=searchfa(p1); p2f=searchfa(p2); a[p2f]=p1f; } for(int i=1;i<=n;i++) { if(a[i]==i) cnt++; } if(cnt==1) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; } int searchfa(int x) { if(x==a[x]) return x; else return searchfa(a[x]); }

浙公网安备 33010602011771号