树的直径
Anxdada
多读书多看报, 少吃零食多睡觉
展开
-
HihoCoder-1050 【裸树的直径】
题目地址 解释 : 求树的最长路(树的直径) 首先假设树的最长路的两个叶子节点为v1,v2,那么现有结论,从任意一点u出发走到的最远的点一定是(v1,v2)中的一点,然后 再从v1或者v2出发走到的最远点一定是v2或者v1。所以经过两次搜索就能找到最长路径.相关证明 AC代码: dfs 找节点#include<cstdio>#include<vector>#include<cstr原创 2017-06-20 23:05:49 · 363 阅读 · 0 评论 -
江苏省赛 --- H题 【树的直径+思维】
题目地址思想就是: 树的直径一定可以保证最长, 然后就是读懂题, 不要抠字眼, 模拟一下样列输出就可以明白题意. 然后想到用树的直径去套一下就行了.AC代码:#include<cstdio>#include<cmath>#include<algorithm>#include<iostream>#include<cstring>#include<cstdlib>#define CLR(x)原创 2017-06-20 23:13:16 · 427 阅读 · 0 评论 -
Gym - 100676H Capital City【强联通缩点 + 树的直径】
传送门 //思路 : 先根据题意知道肯定是先要强联通缩点, 然后分析题意知道, 要使最远的距离的最小, 就要想到树的直径. 因为树的直径端点到树上的点的距离才最远, 然后要最小那么就枚举一下就行了. AC Code/** @Cain*/const int maxn=2e5+5;int dfn[maxn],low[maxn],bel[maxn];int head[maxn],cut[maxn原创 2017-07-21 20:17:45 · 497 阅读 · 0 评论 -
Gym-100781A 【树的直径 + 思维】
传送门 //题意: 给你很多颗树(当然也可能只有一棵树), 问你怎样连接起来可以使得形成的树上最远的距离最小,并输出这个距离. //思路: 当然是和树的直径有关, 然后可以知道从直径折半的地方连出去是最优的, 先用并查集求出每一棵树的直径. 然后需要讨论几种情况, 一是有一棵树它的直径本来就很长, 那么答案有可能是它, 然后(必须两棵树以上)就是直径第一长的和第二长的, 可能是一种答案, 还有一原创 2017-10-08 20:28:43 · 536 阅读 · 0 评论 -
POJ - 3162 Walking Race 【树上最远距离 + 线段树处理区间最值 + 尺取法 】
传送门 //一棵树, wc第i天从第i个节点开始跑, 记录一个最大值., 然后可以获得n个最大值, 然后从中选取连续的尽可能长的天数使得其中的最大值 - 最小值 <= m 问这个最大的天数是多少.//思路: 每个点的最大值可由树的直径求出, 然后问题转变为给你一串数字, 从中选取最长的区间, 使得其中的最大最小值之差<=m, 所以处理区间问题当然是用线段树呀, 然后进行尺取, 双指针i,j, 一起原创 2017-10-13 11:14:05 · 428 阅读 · 0 评论 -
树的直径 【板子】
不带解释版模板O(n)常数较大, 但是可以知道树上每一点到直径端点的距离, 这个大多时候都很有用!struct node{ int to,w,next;}e[maxn*2];ll dis1[maxn],dis2[maxn];int st,ed,max_len;void dd(int u,int fa,int len,int flag){ if(flag) di...原创 2017-07-22 23:44:25 · 528 阅读 · 0 评论