给你一个森林,让你把它连接成一颗树,使得直径最小。

就求出每颗树的重心以后,全都往直径最大的那个的重心上连,一般情况是最大/2+次大/2+1,次大/2+第三大/2+2 中取较大者。

还有些特殊情况要特判处理一下。

#include<cstdio>
#include<algorithm>
using namespace std;
int v[200010],first[100010],next[200010],e;
void AddEdge(int U,int V){v[++e]=V;next[e]=first[U];first[U]=e;
}
int n,m;
int S1;
bool vis[100010],vis2[100010];
int maxD;
void dfs(int U,int d){vis[U]=1;if(d>maxD){maxD=d;S1=U;}for(int i=first[U];i;i=next[i]){if(!vis[v[i]]){dfs(v[i],d+1);}}
}
void df2(int U,int d){vis2[U]=1;maxD=max(maxD,d);for(int i=first[U];i;i=next[i]){if(!vis2[v[i]]){df2(v[i],d+1);}}
}
int b[100010],be;
int main(){
//  freopen("a.in","r",stdin);int x,y;scanf("%d%d",&n,&m);if(n==1){puts("0");return 0;}if(n==2){puts("1");return 0;}for(int i=1;i<=m;++i){scanf("%d%d",&x,&y);++x;++y;AddEdge(x,y);AddEdge(y,x);}for(int i=1;i<=n;++i){if(!vis[i]){maxD=0;dfs(i,0);maxD=0;df2(S1,0);b[++be]=maxD;}}sort(b+1,b+be+1);int tmp=max(2,max(b[be]/2+b[be]%2+b[be-1]/2+b[be-1]%2+(be!=1),b[be]));if(be>=3){tmp=max(tmp,b[be-2]/2+b[be-2]%2+b[be-1]/2+b[be-1]%2+2);}printf("%d\n",tmp);return 0;
}

转载于:https://www.cnblogs.com/autsky-jadek/p/7219592.html

【DFS】Gym - 100781A - Adjoin the Networks相关推荐

  1. Bailian2815 城堡问题【DFS】

    2815:城堡问题 总时间限制: 1000ms 内存限制: 65536kB 描述 1 2 3 4 5 6 7 ############################# 1 # | # | # | | ...

  2. Bailian2816 红与黑【DFS】

    2816:红与黑 总时间限制: 1000ms 内存限制: 65536kB 描述 有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动.请写一 ...

  3. NUC1158 Lake Counting【DFS】

    Lake Counting 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 Due to recent rains, water has pooled ...

  4. NUC1399 Sum It Up【DFS】

    Sum It Up 时间限制: 1000ms 内存限制: 65535KB 通过次数: 1总提交次数: 1 问题描述 Given a specified total t and a list of n ...

  5. 【二】gym初次入门一学就会---代码详细解析简明教程----平衡杆案例

    相关文章: [一]gym环境安装以及安装遇到的错误解决 [二]gym初次入门一学就会-简明教程 [三]gym简单画图 [四]gym搭建自己的环境,全网最详细版本,3分钟你就学会了! [五]gym搭建自 ...

  6. CSI笔记【6】:Guaranteeing spoof-resilient multi-robot networks论文阅读

    CSI笔记[6]:Guaranteeing spoof-resilient multi-robot networks论文阅读 Abstract 1 Introduction 1.1 Contribut ...

  7. 【四】gym搭建自己的环境,全网最详细版本,3分钟你就学会了!

    相关文章: [一]gym环境安装以及安装遇到的错误解决 [二]gym初次入门一学就会-简明教程 [三]gym简单画图 [四]gym搭建自己的环境,全网最详细版本,3分钟你就学会了! [五]gym搭建自 ...

  8. HDU1181 变形课【DFS】(废除)

    新题解参见:HDU1181 变形课[DFS+关系闭包+bitset] 变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 13107 ...

  9. [论]【DSTGCN】Dynamic SpatiotemporalGraph Convolutional Neural Networks for Traffic Data Imputation

    Dynamic Spatiotemporal Graph Convolutional Neural Networks for Traffic Data Imputation with Complex ...

  10. 【DFS】巧妙取量的倒油问题

    题目描述 [题目描述]  有三个容器,容量分别为 a,b,c(a> b > c ),一开始a装满油,现在问是否只靠abc三个容器量出k升油.如果能就输出"yes",并且 ...

最新文章

  1. js 地址的封装以及地址栏的参数获取
  2. ReduceTask工作机制
  3. python在中小学教学中的应用-为什么越来越多人学习python?中小学都要开始了?...
  4. 3D手势姿态跟踪算法:手机端实时检测,多个手势同时捕捉
  5. android运营商获取本机号码_一键登录已成大势所趋,Android端操作指南来啦!
  6. MySQL基本语句和连接字符串
  7. [swift] LeetCode 104. Maximum Depth of Binary Tree
  8. 比赛结果展示时,某些文字过长,如何使其换行又不影响美观?
  9. 工厂模式的三张类图(一目了然)
  10. CPC客户端打开报错:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
  11. Linux下运行黑客帝国屏保
  12. 面象对象的系统设计之一
  13. todo已完成任务_总结一下TODO的用法
  14. 针式PKM初级应用:针式PKM更适合管理什么样的文件
  15. ffmpeg视频剪辑视频长度问题,视频无声音,视频卡顿问题
  16. 企业工程项目管理系统平台(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)
  17. python派森编程软件_《派森》(Python)
  18. Linux 条件变量 pthread_cond_wait
  19. 小米官网首屏纯css代码
  20. how2j:JAVA学习笔记——DAY 9

热门文章

  1. Asio源码分析(2):Asio用到的C++技巧和优化
  2. electron-vue中调用系统屏幕键盘(linux与windows)
  3. 《此生未完成读书总结》
  4. 我在京东这一年—张亮
  5. 访问小米路由器内置硬盘
  6. Photoshop2018安装
  7. 应用泛函分析—线性空间
  8. 一文详解蒙特卡洛(Monte Carlo)法及其应用
  9. 【项目经验】产研流程(超级详细的步骤)
  10. bzoj4565 [Haoi2016]字符合并 (区间DP + 状压DP)