P2078朋友

一、题目描述

  P2078朋友

 

   P2078朋友

 

 二、题目分析

  这个题目我觉得题意有点问题的,后面把并查集的模板改成等于就行了,也就是计算两个公司认识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 }

 

上一篇:川大新生赛----羊工八刀----数学思维+前缀和


下一篇:LOJ6285. 数列分块入门 9 - 离线区间众数 -- 回滚莫队