一、题目描述
二、题目分析
这个题目我觉得题意有点问题的,后面把并查集的模板改成等于就行了,也就是计算两个公司认识1号人的人数取个最小值,因为你不可能凭空造人,对吧?
三、代码实现
1 #include "bits/stdc++.h" 2 using namespace std; 3 int a[10100],b[10100]; 4 int find(int u,int *n) 5 { 6 if(u == n[u]) 7 return u; 8 return n[u] = find(n[u],n); 9 } 10 int main() 11 { 12 int n,m,p,q; 13 cin >> n >> m >> p >> q; 14 for(int i = 1;i <= n;i++) 15 a[i] = i; 16 for(int i = 1;i <= m;i++) 17 b[i] = i; 18 int fx,fy; 19 for(int i = 1;i <= p;i++){ 20 cin >> fx >> fy; 21 fx = find(fx,a); 22 fy = find(fy,a); 23 a[fy] = fx; 24 } 25 26 for(int j = 1;j <= q;j++){ 27 cin >> fx >> fy; 28 fx = -fx; 29 fy = -fy; 30 fx = find(fx,b); 31 fy = find(fy,b); 32 b[fy] = fx; 33 } 34 35 int cnt1,cnt2; 36 cnt1 = cnt2 = 0; 37 for(int i = 1;i <= n;i++) 38 if(find(i,a) == find(1,a)) 39 cnt1++; 40 41 for(int j = 1;j <= m;j++) 42 if(find(j,b) == find(1,b)) 43 cnt2++; 44 cout << min(cnt1,cnt2) << endl; 45 return 0; 46 }