Codeforces 744A. Hongcow Builds A Nation
A. Hongcow Builds A Nation
题意: 现在有 n 个点 ,m 条边组成了一个无向图 , 其中有 k 个特殊点, 这些特殊点之间不能连通 ,问可以再多加几条边?
因为$x^2+y^2<=(x+y)^2$,所以找出所有连通块,枚举一个特殊连通块,与其他非特殊连通块合在一起。一个连通块贡献答案:$\frac{Size^2-Size}{2}-已有边$
#include< cstdio > typedef long long ll;
template
inline void read(T&x)
{
x=0;bool f=0;char c=getchar();
while((c<'0'||c>'9')&&c!='-') c=getchar();if(c=='-')f=1, c=getchar();
while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}
x=f?-x:x;
}
const int MAXN(1010);
int n,m,k,a,b,f[MAXN],c[MAXN],size[MAXN],have[MAXN],que[MAXN],tl,Ans,tmp,now;
bool bf[MAXN];
int gf(int x){return x==f[x]?x:f[x]=gf(f[x]);}
int max(int a,int b){return a>b?a:b;}
void Union(int a,int b)
{
int fa=gf(a),fb=gf(b);
if(fa!=fb)
{
size[fa]+=size[fb];
have[fa]+=have[fb];
f[fb]=fa;
}
have[fa]++;
}
int Edge(int x)
{
return (size[x]*(size[x]-1))/2-have[x];
}
int main()
{
// freopen("C.in","r",stdin);
// freopen("C.out","w",stdout);
read(n);read(m);read(k);
for(int i=1;i<=n;i++)f[i]=i,size[i]=1;
for(int i=1;i<=k;i++)read(c[i]);
for(int i=1;i<=m;i++)
{
read(a);read(b); Union(a,b);
}
for(int i=1;i<=n;i++)
if(!bf[gf(i)])que[++tl]=gf(i),bf[gf(i)]=1;
for(int i=1;i<=k;i++)
{
bf[gf(c[i])]=0;
Ans+=Edge(gf(c[i]));
}
// fprintf(stderr,"%d\n",tl);
for(int i=1;i<=tl;i++)
if(bf[que[i]])
{
size[0]+=size[que[i]];
have[0]+=have[que[i]];
}
// fprintf(stderr,"Ans%d\n",Ans);
// fprintf(stderr,"0:%d\n",Edge(0));
now=Ans;
for(int i=1;i<=k;i++)
{
tmp=now;
size[0]+=size[gf(c[i])];
have[0]+=have[gf(c[i])];
tmp-=Edge(gf(c[i]));
tmp+=Edge(0);
// fprintf(stderr,"s0:%d\n",size[0]);
// fprintf(stderr,"h0:%d\n",have[0]);
// fprintf(stderr,"e0:%d\n",Edge(0));
// fprintf(stderr,"tmp:%d\n",tmp);
size[0]-=size[gf(c[i])];
have[0]-=have[gf(c[i])];
Ans=max(Ans,tmp);
}
printf("%d\n",Ans);
return 0;
}
Codeforces 744A. Hongcow Builds A Nation的更多相关文章
- Codeforces Round #385 (Div. 2) Hongcow Builds A Nation —— 图论计数
题目链接:http://codeforces.com/contest/745/problem/C C. Hongcow Builds A Nation time limit per test 2 se ...
- C. Hongcow Builds A Nation
C. Hongcow Builds A Nation time limit per test 2 seconds memory limit per test 256 megabytes input s ...
- Codeforces 745C:Hongcow Builds A Nation(并查集)
http://codeforces.com/problemset/problem/744/A 题意:在一个图里面有n个点m条边,还有k个点是受限制的,即不能从一个受限制的点走到另外一个受限制的点(有路 ...
- Codeforces Round #385 (Div. 2) C - Hongcow Builds A Nation
题目链接:http://codeforces.com/contest/745/problem/C 题意:给出n个点m条边,还有k个不能连通的点,问最多能添加几条边. 要知道如果有n个点最多的边是n*( ...
- C. Hongcow Builds A Nation 并查集
http://codeforces.com/contest/745/problem/C 把他们并查集后, 其他没有连去government的点,全部放去同一个并查集,然后选择一个节点数最多的gover ...
- codeforces 744C Hongcow Buys a Deck of Cards
C. Hongcow Buys a Deck of Cards time limit per test 2 seconds memory limit per test 256 megabytes in ...
- Codeforces 744C Hongcow Buys a Deck of Cards 状压dp (看题解)
Hongcow Buys a Deck of Cards 啊啊啊, 为什么我连这种垃圾dp都写不出来.. 不是应该10分钟就该秒掉的题吗.. 从dp想到暴力然后gg, 没有想到把省下的红色开成一维. ...
- Codeforces.744B.Hongcow's Game(交互 按位统计)
题目链接 \(Description\) 一个\(n\times n\)的非负整数矩阵\(A\),保证\(A_{i,i}=0\).现在你要对每个\(i\)求\(\min_{j\neq i}A_{i,j ...
- Codeforces 744C. Hongcow Buys a Deck of Cards(状压DP)
这题的难点在于状态的设计 首先显然是个状压,需要一维表示卡的状态,另一维如果设计成天数,难以知道当前的钱数,没法确定是否能够购买新的卡,如果设计成钱数,会发现状态数过多,空间与时间都无法承受.但是可以 ...
随机推荐
- 聚类算法(二)--BIRCH
BIRCH (balanced iterative reducing and clustering using hierarchies)(名字太长不用管了) 无监督,适合大样本的聚类方法.大多数情况只 ...
- All Roads Lead to Rome(30)(MAP【int,string】,邻接表,DFS,模拟,SPFA)(PAT甲级)
#include<bits/stdc++.h>using namespace std;map<string,int>city;map<int,string>rcit ...
- CF17E Palisection(回文自动机)
题意翻译 给定一个长度为n的小写字母串.问你有多少对相交的回文子 串(包含也算相交) . 输入格式 第一行是字符串长度n(1<=n<=2*10^6),第二行字符串 输出格式 相交的回文子串 ...
- Linux安装 oracle 11g r2
Linux环境配置 OS:Fedora 15 DB:Oracle 11gR2 将Oracle安装到home/oracle_11目录 配置过程:本文来自Oracle官方文档+网上资料 Oracle官方文 ...
- jmeter - 录制app接口
准备: 1.手机 2.wifi 3.Jmeter 步骤: 1.Jmeter->文件->Template 2.手机设置代理 端口:8888:电脑的ip,如下图设置 3.点击启动 ...
- plpython 中文分词Windows下 PG数据库jieba分词
windows 下安装版本匹配python-3.4.3.amd64.msipostgresql-10.1-2-windows-x64.exe create language plpython3u;se ...
- CF987C Three displays 暴力
题意翻译 题目大意: nnn个位置,每个位置有两个属性s,cs,cs,c,要求选择3个位置i,j,ki,j,ki,j,k,使得si<sj<sks_i<s_j<s_ksi< ...
- :input获得焦点时被弹出键盘挡住解决办法
这个是移动端非常常见的bug了,这里说下综合的解决办法,因为有时候你的办法就是会失效.. 上代码 /*input框调起输入法盖住输入问题*/$('input[type="text" ...
- Python----Anaconda + PyCharm + Python 开发环境搭建(使用pip,安装selenium,使用IDLE)
1.Python开发中会用到的工具下载地址 FireBug插件安装地址:https://addons.mozilla.org/en-US/firefox/addon/firebug/ FirePath ...
- JS——通过标签获取元素、循环语句、数组去重
通过标签获取元素: var aLi = document.getElementsByTagName('Li'); aLi[0].style.backgroundColor = 'gold'; 选中部分 ...