消防 题目描述 某个国家有n个城市,这n个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为zi(zi<=1000). 这个国家的人对火焰有超越宇宙的热情,所以这个国家最兴旺的行业是消防业.由于政府对国民的热情忍无可忍(大量的消防经费开销)可是却又无可奈何(总统竞选的国民支持率),所以只能想尽方法提高消防能力. 现在这个国家的经费足以在一条边长度和不超过s的路径(两端都是城市)上建立消防枢纽,为了尽量提高枢纽的利用率,要求其他所有城市到这条路径的距离的最大值最小. 你受命监管这…
NOIP2007 树网的核 树的直径的最长性是一个很有用的概念,可能对一些题都帮助. 树的直径给定一棵树,树中每条边都有一个权值,树中两点之间的距离定义为连接两点的路径边权之和.树中最远的两个节点之间的距离被称为树的直径,连接这两点的路径被称为树的最长链.后者通常也可称为直径,即直径是一个数值概念,也可代指一条路径树的直径通常有两种求法,时间复杂度均为O(n).我们假设树以N个点N-1条边的无向图形式给出,并存储在邻接表中. 然后就直接说题解吧: 其实原本的数据范围只有三百$n^3$可过,直接f…
题目: http://cojs.tk/cogs/problem/problem.php?pid=97 97. [NOIP2007] 树网的核 ★☆   输入文件:core.in   输出文件:core.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述]    设T=(V,E,W)是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称T为树网(treenetwork),其中v,E分别表示结点与边的集合,W表示各边长度的集合,并设T有n个结点.路径:树网中…
P1099 树网的核 112通过 221提交 题目提供者该用户不存在 标签动态规划树形结构2007NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录   题目描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并设T有n个结点. 路径:树网中任何两结点a,b都存在唯一的一条简单路径,用d(a, b)表示以a, b为端点的路径的长度,它是该路径上…
链接https://www.luogu.org/problemnew/show/P1099 题目描述 设T=(V,E,W)是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称TTT为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并设T有n个结点. 路径:树网中任何两结点a,b都存在唯一的一条简单路径,用d(a,b)表示以a,b为端点的路径的长度,它是该路径上各边长度之和.我们称d(a,b)为a,ba两结点间的距离. D(v,P)=min…
题目:树网的核 网址:https://www.luogu.com.cn/problem/P1099 题目描述 设 T=(V,E,W)T=(V,E,W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称 TT 为树网(treenetwork),其中 VV,EE 分别表示结点与边的集合,WW 表示各边长度的集合,并设 TT 有 nn 个结点. 路径:树网中任何两结点 aa,bb 都存在唯一的一条简单路径,用 d(a, b)d(a,b) 表示以 a, ba,b 为端点的路径的长度…
要求最大值最小容易想到二分答案.首先对每个点求出子树中与其最远的距离是多少,二分答案后就可以标记上一些必须在所选择路径中的点,并且这些点是不应存在祖先关系的.那么如果剩下的点数量>=3,显然该答案不可行:=0,显然可行:=1,由该点沿其到根的路径往上爬,并计算最远距离判断是否合法:=2,求出两点lca后与1的做法类似. noip原题是要求该路径在一条直径上,事实上这条最优路径一定是在直径上的,不过并不太懂这之间的关系. 写的太丑于是常数巨大,bzoj上愉快的T掉了. #include<iost…
想一下可以发现随便枚举一条直径做就可以了. 核越长越好.于是枚举核的过程可以做到O(n) 然后就是统计答案. 对于每个核最大偏心距肯定是核上面每个点不走核内的点所能走到的最远点的最值. 而且对于核的两端点,距离最远的点肯定是本条直径的端点. 于是我们可以用树形dp,处理出每个直径上的点不走本直径,所能走到的最远点的距离,记为f[]. 然后核每+1,就把当前点f[]塞到单调队列里面.每-1,就把队头弹出. 总共是O(N). #include <cstdio> #include <algor…
题目链接 Solution 同 \(NOIP2007\) 树网的核 . 令 \(dist_u\) 为以 \(u\) 为根节点的子树中与 \(u\) 的最大距离. \(~~~~dis_u\) 为 \(u\) 到直径中没有包括区间的一端的距离. \(~~~~s\) 为直径. 题意很明确,要求直径上的一段区间使得 \(Max(dist_u(u\epsilon s),dis_u)\) 最小. 考虑 \(O(n)\) ,直接在直径上尺取就好了... 考虑 \(O(nlogn)\) ,直接二分+枚举起点就好…
一道树的直径 树网的核 BZOJ原题链接 树网的核 洛谷原题链接 消防 BZOJ原题链接 消防 洛谷原题链接 一份代码四倍经验,爽 显然要先随便找一条直径,然后直接枚举核的两个端点,对每一次枚举的核遍历核上的每个点,用\(dfs\)求出核外节点到核的最大值即可,时间复杂度为\(O(n^3)\),这在\(NOIP\)的原数据范围下是可以过的,但对于数据加强版就必须要优化了. 发现当枚举到直径上的某个点时,核的另一端在不超过\(s\)的前提下显然越远越好.这样就直接优化掉一个\(n\)了,但我们还可…