Codeforces Round #385 (Div. 2) C
来源:互联网 发布:域名如何icp备案 编辑:程序博客网 时间:2024/06/03 21:30
思路如下:
先找联通块
没有特殊点的联通块加起来与在有特殊点中点最多的联通块 这样最多有c2n 即n*(n-1)/2;
剩下的特殊联通块自己加边
代码如下
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<vector>using namespace std;const int maxn=1005;vector<int>group[maxn];int f[maxn],c[maxn];int Find(int x){if(f[x]==x)return x;return f[x]=Find(f[x]);}void unite(int u,int v){int xx=Find(u);int yy=Find(v);if(xx!=yy) f[xx]=yy;}int main(){int n,m,k,u,v; scanf("%d %d %d",&n,&m,&k);for(int i=0;i<k;i++)scanf("%d",&c[i]);for(int i=1;i<=n;i++)f[i]=i;for(int i=0;i<m;i++){int u,v;scanf("%d %d",&u,&v);unite(u,v);} int sum1=0,sum=0,ma=0;for(int i=0;i<maxn;i++)group[i].clear();for(int i=1;i<=n;i++)group[Find(i)].push_back(i);for(int i=0;i<k;i++){int temp=Find(c[i]);int num=group[temp].size();ma=max(num,ma);sum1+=num; sum+=(num*(num-1))/2;}sum1=n-sum1;sum1+=ma;sum+=(sum1*(sum1-1))/2;sum-=(ma*(ma-1))/2;sum-=m;printf("%d\n",sum);}
阅读全文
0 0
- Codeforces Round #385 (Div. 2) C
- 【codeforces】Codeforces Round #370 (Div. 2) C
- Codeforces Round #385 (Div. 2)
- Codeforces Round #385 (Div. 2)
- Codeforces Round #385 (Div. 1) C
- Codeforces Round #105 (Div. 2) C
- Codeforces Round 134 div 2 C题
- Codeforces Round #137 (Div. 2), problem: (C)
- Codeforces Round #153 (Div. 2) C题
- Codeforces Round #158 (Div. 2) C题
- Codeforces Round #162 (Div. 2) C
- Codeforces Round #166 (Div. 2) c. Secret
- Codeforces Round#170(Div 2)C
- Codeforces Round #173 (Div. 2) Problem C
- Codeforces Round #192 (Div. 2) C. Purification
- Codeforces Round #196 (Div. 2) C. Quiz
- Codeforces Round #197 (Div. 2) (C~E)
- Codeforces Round #196 (Div. 2) C. Quiz
- 数据结构实验之查找三:树的种类统计(二叉排序树)
- 今天看到的一个有趣面试题:return *this和return this有什么区别?
- 各种排序算法的时间复杂度
- 组合博弈 -- 三大基本博弈
- 单点登录SSO
- Codeforces Round #385 (Div. 2) C
- 渗透攻防web篇-sql注入攻击中级
- day07
- 20170805
- 用Annotation,内省技术给一个对象注入属性
- Java基础05 实施接口
- Java知识点导图
- Java 迭代与递归
- Android 常用sql语句笔记(二)