题目链接:http://codeforces.com/gym/100781/attachments

题目大意:给你n个点和l条边, 让你添加一些边形成一棵树使得树的直径尽可能小。

(1 <= n <= 1e5)    (0 <= l <= n - 1)

解题思路:我们先把已经形成的一些树的每个直径都求出来, 把这些直径从大到小排序, 如果只有1个直径, 答案就是这个直径, 如果有两个, 就是最长和次长从中间连起来, 还有一种可能就是第三长和第二长连起来比第一第二长。 求树的直径, 我用的是一遍dfs, dfs 的时候维护当前节点为根的最长和次长值, 最后 根节点最长+次长就是直径。

//2017-08-01 22:13
//2017-08-01 22:29
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cstdlib>
#include<vector>
using namespace std;
const int MaxN = 1e5;int n, m, len;
vector<int>edge[MaxN + 5];
int q[MaxN + 5];
bool vis[MaxN + 5];bool cmp(int a, int b){ return a > b; }int dfs(int u){vis[u] = true;int m1 = 0, m2 = 0;for(int i = 0; i < edge[u].size(); i++){int v = edge[u][i];if(!vis[v]){int tmp = dfs(v) + 1;if(tmp > m1){m2 = m1, m1= tmp;}else if(tmp > m2){m2 = tmp;}}}len = max(len, m1 + m2);return m1;
}int main(){scanf("%d %d", &n, &m);for(int i = 1; i <= m; i++){int u, v;scanf("%d %d", &u, &v);edge[u].push_back(v);edge[v].push_back(u);}int cnt = 0, ans = 0;for(int i = 0; i < n; i++){len = 0;if(!vis[i]){int tmp = dfs(i);q[++cnt] = len;ans = max(ans, len);}}sort(q + 1, q + 1 + cnt, cmp);if(cnt > 1) ans = max(ans, (q[1] + 1) / 2 + (q[2] + 1) / 2 + 1);if(cnt > 2) ans = max(ans, (q[2] + 1) / 2 + (q[3] + 1) / 2 + 2);printf("%d\n", ans);return 0;
}

【Codeforces】2015-2016 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2015) A Adjoin the Netwo相关推荐

  1. 2016-2017 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2016)题解

    2016-2017 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2016) A - Artwork 题目描述: 给定N*M的网格,给出Q次 ...

  2. Nordic Collegiate Programming Contest (NCPC) 2016

    A Artwork B Bless You Autocorrect! C Card Hand Sorting D Daydreaming Stockbroker 贪心,低买高卖,不要爆int. #in ...

  3. 2018 ACM ICPC Arabella Collegiate Programming Contest A

    Multiplication operation is not always easy! For example, it is hard to calculate 27 × 20 using your ...

  4. A - Multiplication Dilemma (思维)( 2018 ACM ICPC Arabella Collegiate Programming Contest)

    滴答滴答---题目链接 Multiplication operation is not always easy! For example, it is hard to calculate 27 × 2 ...

  5. 2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017)

    D.Distinctive Character 看到样例,第一个反应贪心.先写了个按这一位1和0的数目多少,确定0还是1的东西.感觉不够真,又写了个尽量加到相似的比较小的串上的贪心.在和前边的那个组合 ...

  6. 2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018) - 4.28

    赛后补了几道 赛中我就写了两个... A - Altruistic AmphibiansGym - 101933A 看了眼榜没几个人做.就没看. 最后发现就是一个DP(但是我觉得复杂度有点迷) 题意: ...

  7. Nordic Collegiate Programming Contest 2017 题解

    前几天打了一场外国人的比赛,感觉那边的题目质量还是很好的,区分度很鲜明,题目没有国内的难,坑点比较少,比较注重思维,基础算法. B题: Best Relay Team Picture by Ferna ...

  8. 2016 ACM / ICPC Asia dalian Regional Contest 题解(11 / 11)【每日亿题2021 / 2 / 17】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A .(2017 ACM ICPC dalian H)To begin or not to be ...

  9. 【转】lonekight@xmu·ACM/ICPC 回忆录

    转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM 最早听说ACM/ICP ...

  10. Nordic Collegiate Programming Contest 2016

    A Artwork 输入: n,m表示原图为n*m个白色方格,输入x1,y1,x2,y2表示将x1,y1,x2,y2涂为黑色. 输出: 对于每个x1,y1,x2,y2输入当前图案白色联通块的数目. 思 ...

最新文章

  1. 采购计算机的,如何采购计算机
  2. 微软云服务再添新产品,这次来自两位华裔女科学家创办的AI公司
  3. ARM GIC简介与Linux中断处理分析
  4. 怎样调用另一个html中的元素,html – 使用DIV作为另一个元素的背景
  5. 《软件项目管理(第二版)》第 8 章——项目团队与干系人 重点部分总结
  6. Android笔记-雷电模拟器(Android5.1.1)安装Xposed
  7. 操作系统学习笔记(一) 进程与线程模型
  8. The Django Book
  9. xwt100编程器使用方法与xtw100没有找到编程器解决办法
  10. PyQt5 clicked和clicked[bool]信号区别/setCheckable()的应用
  11. c语言色环电阻计算器源代码,色环电阻在线计算器
  12. 瑞幸最新股权曝光:大钲资本持股33.9% 有57%投票权
  13. spec.ports[0].name: Required value
  14. 与、或、非、与非、或非、异或、同或
  15. 计算机打字盲打方法,盲打
  16. 计算机里的word怎么重装,word能卸载重装吗 word卸载重装
  17. 携程java面经 一二HR面面经
  18. PEEL——深度隐写信息去除攻击——PEEL: A Provable Removal Attack on Deep Hiding
  19. xsl:apply-templates和xsl:call-template的区别
  20. 深圳湾口岸过关进入香港的交通方法

热门文章

  1. 中文名颜色大全,妈妈再也不担心我找不着好颜色了.
  2. MAC 使用技巧总结
  3. 海康、大华视频流地址格式
  4. Android 服务器消息推送技术
  5. 水逆期自我救赎:MacBook pro进水
  6. Canvas线条动画
  7. 电信物联网平台对接教程
  8. Win10·不重装系统·扩充C盘
  9. 2021平(jia)凡(ban)的一年
  10. Shell实现俄罗斯方块小游戏