C. Hongcow Builds A Nation
2 seconds
256 megabytes
standard input
standard output
Hongcow is ruler of the world. As ruler of the world, he wants to make it easier for people to travel by road within their own countries.
The world can be modeled as an undirected graph with n nodes and m edges. k of the nodes are home to the governments of the k countries that make up the world.
There is at most one edge connecting any two nodes and no edge connects a node to itself. Furthermore, for any two nodes corresponding to governments, there is no path between those two nodes. Any graph that satisfies all of these conditions is stable.
Hongcow wants to add as many edges as possible to the graph while keeping it stable. Determine the maximum number of edges Hongcow can add.
The first line of input will contain three integers n, m and k (1 ≤ n ≤ 1 000, 0 ≤ m ≤ 100 000, 1 ≤ k ≤ n) — the number of vertices and edges in the graph, and the number of vertices that are homes of the government.
The next line of input will contain k integers c1, c2, ..., ck (1 ≤ ci ≤ n). These integers will be pairwise distinct and denote the nodes that are home to the governments in this world.
The following m lines of input will contain two integers ui and vi (1 ≤ ui, vi ≤ n). This denotes an undirected edge between nodes ui and vi.
It is guaranteed that the graph described by the input is stable.
Output a single integer, the maximum number of edges Hongcow can add to the graph while keeping it stable.
4 1 2
1 3
1 2
2
3 3 1
2
1 2
1 3
2 3
0
For the first sample test, the graph looks like this:
Vertices 1 and 3 are special. The optimal solution is to connect vertex 4 to vertices 1 and 2. This adds a total of 2 edges. We cannot add any more edges, since vertices 1 and 3 cannot have any path between them.
For the second sample test, the graph looks like this:
We cannot add any more edges to this graph. Note that we are not allowed to add self-loops, and the graph must be simple.
1 #include<iostream>
2 #include<string.h>
3 #include<algorithm>
4 #include<queue>
5 #include<math.h>
6 #include<stdlib.h>
7 #include<stack>
8 #include<stdio.h>
9 #include<ctype.h>
10 #include<map>
11 #include<vector>
12 using namespace std;
13 typedef long long LL;
14 int c[100005];
15 int bin[100005];
16 int du[100005];
17 vector<int>vec[100005];
18 int fin(int x);
19 int ask[100005];
20 int id[100005];
21 map<int,int>my;
22 LL bian[100005];
23 int main(void)
24 {
25 int n,m,k;
26 int i,j;
27
28 while(scanf("%d %d %d",&n,&m,&k)!=EOF)
29 {
30 my.clear();
31 memset(bian,0,sizeof(bian));
32 for(i = 0; i <100005; i++)vec[i].clear(),bin[i] = i,du[i] = 1;
33 for(i = 1; i <=k; i++)
34 scanf("%d",&c[i]);
35 while(m--)
36 {
37 int x,y;
38 scanf("%d %d",&x,&y);
39 vec[x].push_back(y);
40 vec[y].push_back(x);
41 int xx = fin(x);
42 int yy = fin(y);
43 if(xx!=yy)
44 {
45 if(du[xx] > du[yy])
46 {
47 du[xx] += du[yy],bin[yy] = xx;
48 bian[xx]+=bian[yy];
49 bian[xx]++;
50 }
51 else
52 {
53 du[yy] += du[xx],bin[xx] = yy;
54 bian[yy]+=bian[xx];
55 bian[yy]++;
56 }
57 }
58 else bian[xx]++;
59 }
60 for(i = 1; i <= n; i++)
61 {
62 ask[i] = fin(i);
63 }
64 LL maxx = 0;
65 LL b;
66 for(i = 1; i <= k; i++)
67 {
68 my[ask[c[i]]] = 1;
69 if(du[ask[c[i]]]>maxx)
70 {
71 maxx = max((LL)du[ask[c[i]]],maxx);
72 b = bian[ask[c[i]]];
73 }
74 }
75 LL cnt = 0;
76 LL mc = 0;
77 for(i = 1; i <= n; i++)
78 {
79 if(!my.count(ask[i]))
80 {
81 cnt+=du[ask[i]];
82 my[ask[i]] = 1;
83 mc+=bian[ask[i]];
84 }
85 }//printf("%lld\n",maxx);
86 LL acc = cnt*(cnt-1)/(LL)2;
87 LL akk = acc;
88 acc+=maxx*cnt;
89 acc-=mc;
90 for(i = 1;i <= k;i++)
91 {
92 acc+=(LL)du[ask[c[i]]]*(LL)(du[ask[c[i]]]-1)/(LL)2;
93 acc-=bian[ask[c[i]]];
94 }
95 printf("%lld\n",acc);
96 }
97 return 0;
98 }
99 int fin(int x)
100 {
101 int i;
102 for(i = x; i!=bin[i];)
103 i = bin[i];
104 return i;
105 }
C. Hongcow Builds A Nation的更多相关文章
- Codeforces 744A. Hongcow Builds A Nation
A. Hongcow Builds A Nation 题意: 现在有 n 个点 ,m 条边组成了一个无向图 , 其中有 k 个特殊点, 这些特殊点之间不能连通 ,问可以再多加几条边? 因为$x^2+y ...
- 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 ...
- Codeforces 745C:Hongcow Builds A Nation(并查集)
http://codeforces.com/problemset/problem/744/A 题意:在一个图里面有n个点m条边,还有k个点是受限制的,即不能从一个受限制的点走到另外一个受限制的点(有路 ...
- C. Hongcow Builds A Nation 并查集
http://codeforces.com/contest/745/problem/C 把他们并查集后, 其他没有连去government的点,全部放去同一个并查集,然后选择一个节点数最多的gover ...
- Codeforces Round #385 (Div. 2) C - Hongcow Builds A Nation
题目链接:http://codeforces.com/contest/745/problem/C 题意:给出n个点m条边,还有k个不能连通的点,问最多能添加几条边. 要知道如果有n个点最多的边是n*( ...
- Codeforces Round #385 (Div. 2) A,B,C 暴力,模拟,并查集
A. Hongcow Learns the Cyclic Shift time limit per test 2 seconds memory limit per test 256 megabytes ...
- Codeforces Round #385 //再遇状压
敲完三题挂机一小时..... 也没懂DE什么意思 rank600上了一波分... A. Hongcow Learns the Cyclic Shift 给一个字符串,每次可以把最后一个字符拿到开头 ...
- Codeforces Round #385 (Div. 2)A B C 模拟 水 并查集
A. Hongcow Learns the Cyclic Shift time limit per test 2 seconds memory limit per test 256 megabytes ...
- cf744
Codeforces Round #385 (Div. 1) <br > A.Hongcow Builds A Nation 贪心. 显然就是凑成一个最大的块即可 那么首先并查集处理已经确 ...
随机推荐
- oracle 将电话号码中间4位数以星号*代替
select replace('17665312355',substr('17665312355',4,4),'****') as phone, #类似E ...
- mysql 计算日期为当年第几季度
select T21620.日期 as F21634, QUARTER('98-04-01') as quarter #返回日期是一年的第几个季度 - ...
- 数据库(database)介绍
0.数据定义:除了文本类型的数据,图像.音乐.声音都是数据. 数据分类:结构化数据.非结构化数据.1.数据库定义:"电子化的文件柜","数据仓库".数据库是一个 ...
- 使用systemd将iptables规则在docker启动后自动导入
编写systemd文件 $ sudo vi /etc/systemd/system/iptables-import.service # /etc/systemd/system/iptables-imp ...
- Spring Boot 热启动插件
1. maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId ...
- Gradle安装与配置
一.Gradle安装 1.Gradle安装 (1)先安装JDK/JRE (2)Gradle下载官网 Gradle官网 (3)解压安装包到想安装到的目录.如D:\java\gradle-5.2.1 (4 ...
- c++string转const char*与char*
#include <iostream> #include <string> #include <memory> using namespace std; const ...
- ORACLE 服务器验证
位于$ORACLE_HOME/network/admin/sqlnet.oraSQLNET.AUTHENTICATION_SERVICES=none|all|ntsnone:关闭操作系统认证,只能密码 ...
- @RequestBody配合@Valid 校验入参参数
自定义一个Controller import com.example.demo.pojo.User; import org.springframework.web.bind.annotation.Po ...
- Output of C++ Program | Set 13
Predict the output of following C++ program. 1 #include<iostream> 2 using namespace std; 3 4 c ...