CodeForces 745C Hongcow Builds A Nation 并查集

Posted 可是我不配

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces 745C Hongcow Builds A Nation 并查集相关的知识,希望对你有一定的参考价值。

题意:

给了你n个城市 m条边 k个政府

每个政府管辖的区域内不能和其他政府的区域有相连

即政府之间不存在路径

问你在维护这种关系的同时

最多再加多少条边

 

思路:

先找出来每个联通块

再找出来没有归属的孤立的点

把他们都放到最大的联通块里

然后每个联通块之间的点两两连边是n*(n-1)/2条边

最后算出来的ans-m就好了

(看别人的博客学了一个max_element

 

 1 #include<bits/stdc++.h>
 2 #define cl(a,b) memset(a,b,sizeof(a))
 3 #define debug(a) cerr<<#a<<"=="<<a<<endl
 4 using namespace std;
 5 typedef long long ll;
 6 typedef pair<int,int> pii;
 7 
 8 const int maxn=1e5+10;
 9 
10 int fa[maxn];
11 
12 int fd(int i)
13 {//并查集
14     if(fa[i]==0) return i;
15     else return fa[i]=fd(fa[i]);
16 }
17 
18 int main()
19 {
20     int n,m,k;
21     scanf("%d%d%d",&n,&m,&k);
22     vector<int>vis(n+1,0);
23     vector<int>gov(k,0),num(k,0);
24     for(int i=0;i<k;i++)
25     {
26         scanf("%d",&gov[i]);
27     }
28     for(int i=0;i<m;i++)
29     {
30         int x,y;
31         scanf("%d%d",&x,&y);
32         int fx=fd(x),fy=fd(y);
33         if(fx!=fy)
34         {//如果不相连的话 把两个点相连
35             fa[fx]=fy;
36         }
37 
38     }
39     for(int i=1;i<=n;i++)
40     {//寻找每个节点所在联通块的大小
41         vis[fd(i)]++;
42     }
43     int rest=n;//初始化所有的点都剩下了
44     for(int i=0;i<k;i++)
45     {//最每个政府所在联通块大小进行记录
46         num[i]=vis[fd(gov[i])];
47         rest-=num[i];//减去已经记录过的点
48     }
49     //剩下的rest就是孤立的点的个数
50 
51     ///新姿势 找出最大的联通块
52     auto mx=max_element(num.begin(),num.end());
53     ///max_element类似于kdtree模板中的nth_element
54 
55     *mx+=rest;//把剩下的点放到最大的连通块中
56     int sum=0;
57     for(auto i:num)
58     {
59         sum+=i*(i-1)/2;
60     }
61     printf("%d\n",sum-m);
62     return 0;
63 }/*
64 
65 3 3 1
66 2
67 1 2
68 1 3
69 2 3
70 
71 */

 

以上是关于CodeForces 745C Hongcow Builds A Nation 并查集的主要内容,如果未能解决你的问题,请参考以下文章

Hongcow Buys a Deck of Cards CodeForces - 744C (状压)

CodeForces - 744A Hongcow Builds A Nation

Codeforces 744C Hongcow Buys a Deck of Cards 状压dp (看题解)

Codeforces 744C. Hongcow Buys a Deck of Cards

Codeforces Round #385(div 2)

CodeForces - 837E - Vasya's Function | Educational Codeforces Round 26