题目大意:有n个点m条边,现在希望将所有的点连接在一起,且要求生成的树的直径尽可能小,问树的直径最小的最大值多少

解题思路:对于目前每个独立的树,求出其的直径,对直径进行排序,为了让最后的树的直径尽可能的小,能做的就是每次将每个树的直径的一半都连接起来,于是最后的答案就从三种情况下出现,第一个情况就是最长的那个树的直径就是最后答案,第二个情况就是最长的直径的一半加次长的直径的一半+1,第三个情况就是次长一半加上次次长的一半+2就是答案

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
typedef long long LL;vector<int> tu[100005];
int n,m;
int check[100005],dis[100005],vis[100005];
int ans[100005], t;
int bfs1(int x)
{int i,k,u,flag;int MAX = 0;flag=x;vis[x]=1;queue<int> qua;qua.push(x);dis[x]=0;while(!qua.empty()){k=qua.front();qua.pop();for(i=0;i<tu[k].size();i++){u=tu[k][i];if(vis[u])continue;vis[u] = 1;qua.push(u);dis[u]=dis[k]+1;if(MAX<dis[u]){flag=u;MAX=dis[u];}}}return flag;
}
int bfs2(int x)
{int i,k,u,flag;int MAX = 0;flag=x;check[x]=1;queue<int> qua;qua.push(x);dis[x]=0;while(!qua.empty()){k=qua.front();qua.pop();for(i=0;i<tu[k].size();i++){u=tu[k][i];if(check[u])continue;check[u] = 1;qua.push(u);dis[u]=dis[k]+1;if(MAX<dis[u]){flag=u;MAX=dis[u];}}}return flag;
}
bool cmp(int x,int y)
{return x>y;
}
int main()
{int i,x,y;cin>>n>>m;for(i=1;i<=m;i++){cin>>x>>y;tu[x].push_back(y);tu[y].push_back(x);} memset(vis,0,sizeof(vis));for(i=0;i<n;i++){if(vis[i]==0){int u=bfs1(i);int v=bfs2(u);ans[++t] = dis[v];}}sort(ans + 1, ans + t + 1,cmp);cout<<max(ans[1],max((ans[1]+1)/2+(ans[2]+1)/2+1,(ans[2]+1)/2+(ans[3]+1)/2+2))<<endl;
}

2015-2016 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2015) Adjoin the Networks (树的直径)相关推荐

  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. 2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017)

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

  3. Nordic Collegiate Programming Contest (NCPC) 2016

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

  4. 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 ...

  5. 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 ...

  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. Nordic Collegiate Programming Contest 2016

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

  10. 2019-2020 ACM ICPC Brazil Subregional Programming Contest E.Exhibition of Clownfish

    我搬运我自己应该算原创吧 题目 题意 题解 题意 某水族馆有一种神奇的

最新文章

  1. 晶体管逻辑芯片设计微缩图形化
  2. [转]C++基础:C++的结构struct
  3. 操作系统原理第五章:CPU调度
  4. All in one TFS 项目建立
  5. 本地方法中printf如何传给java--java系统级命名管道
  6. Oracle学习:条件表达式及分组函数
  7. 《动物森友会》的社交分级,在虚拟世界设计舒适的社交氛围
  8. SQL Server将数据库中的表复制到另一个数据库
  9. linux软件中心替代,Ubuntu 16.04 LTS 将替换 Ubuntu 软件中心
  10. python外汇兑换代码_python爬取人民币汇率中间价
  11. 一文看懂数据挖掘:哪一种方法最好?都需要哪些技术?
  12. JAVA菜鸟入门HelloWorld
  13. 北京大学数学科学学院2006/9/20声明:坚持真理、追求卓越zz
  14. 计算机房通气换气次数,各种换气次数汇总
  15. 【渝粤题库】陕西师范大学164109人力资源管理 作业(高起专)
  16. 华为荣耀9手机通过在Fastboot模式写ramdisk.img来获取ROOT权限 | 华为荣耀9怎么获取ROOT权限 | 华为荣耀9怎么用面具Magisk做ROOT权限
  17. Composer下载以及安装
  18. 8.17 一个博客demo
  19. java正则表达式匹配任意中文_java匹配中文的正则表达式
  20. 通过AI实现实时数据分析和态势监测,进而让机器能够处理日常决策

热门文章

  1. 附032.Kubernetes实现蓝绿发布
  2. 几款强力压缩打包软件
  3. 【新手教程】51Sim-One Cloud 2.0如何接入被测算法
  4. 增强感受野SPP、ASPP、RFB、PPM
  5. 2009 年幸福的一年
  6. CSS3 background 与 渐变
  7. 形容等待时间长的句子_形容等待了很久的句子
  8. 计算机ps2定义,PS2通信协议说明及接口定义(键盘及鼠标).doc
  9. 电脑弹窗广告太多了,程序员电脑为什么没有弹窗,那是你没打开这个设置
  10. 计算机学报英语,修改稿要求-计算机学报.PDF