国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

CodeForces - 744A Hongcow Builds A Nation

2019-11-08 02:44:28
字體:
來源:轉載
供稿:網友

原題鏈接

思路: 先利用已給的邊求出每個政府樹的頂點數(深度搜索) 選出頂點數最多的政府樹,將剩余的與政府點不連通的點加入該樹 此時所有的點被分為k組,將每組中的點全部連同,可以得到最大總邊數,減去已有邊就是答案。

#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>#include <queue>#include <vector> #include <set>#define INF 100000000using namespace std; int n, m, k; //總點數,已有邊數,政府數(樹數) int c[1050]; //政府所在點 vector<int> g[1050]; //g[i]中有所有與i直接相連的點int v, vmax, res;bool vis[1050];void dfs(int s){ int i; v++; vis[s] = true; //s點已經在某個政府樹中 for(i = 0; i < g[s].size(); i++){ int p = g[s][i]; if(!vis[p]){ vis[p] = true; dfs(p); } }}int main(){ int i, j; scanf("%d %d %d", &n, &m, &k); for(i = 0; i < k; i++){ scanf("%d", &c[i]); } for(i = 1; i <= m; i++){ int b, c; scanf("%d %d", &b, &c); g[b].push_back(c); g[c].push_back(b); } for(i = 0; i < k; i++){ v = 0; //與該政府頂點同樹的點 dfs(c[i]); res += v*(v-1)/2; //先將每個政府頂點所在樹上的點全部相連 n -= v; //剩余與任何政府頂點不同樹的點減少v vmax = max(vmax, v); //找出所有政府頂點所在樹中頂點數最多的樹 } res += n*(n-1)/2; //將剩余所有無法到達政府頂點的點相互連接 res += n*vmax; //將這些點與已有的點數最多的樹相連 res -= m;  //減去已有的邊
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金沙县| 延吉市| 卓尼县| 武邑县| 郓城县| 宜川县| 海晏县| 通江县| 无锡市| 抚顺县| 车致| 乐陵市| 晋江市| 尼勒克县| 阳东县| 聂荣县| 读书| 崇礼县| 景谷| 山东| 理塘县| 栾川县| 叙永县| 赤壁市| 清水河县| 于田县| 增城市| 庆安县| 剑川县| 乌兰察布市| 佳木斯市| 青冈县| 获嘉县| 贞丰县| 张家界市| 锡林浩特市| 琼结县| 那坡县| 建平县| 霞浦县| 兴宁市|