『Island 基环树直径』】的更多相关文章

Island(IOI 2008) Description 你准备浏览一个公园,该公园由 N 个岛屿组成,当地管理部门从每个岛屿 i 出发向另外一个岛屿建了一座长度为 L_i 的桥,不过桥是可以双向行走的.同时,每对岛屿之间都有一艘专用的往来两岛之间的渡船.相对于乘船而言,你更喜欢步行.你希望经过的桥的总长度尽可能长,但受到以下的限制: 可以自行挑选一个岛开始游览. 任何一个岛都不能游览一次以上. 无论任何时间,你都可以由当前所在的岛 S 去另一个从未到过的岛 D.从 S 到 D 有如下方法: 步…
Description 你将要游览一个有N个岛屿的公园.从每一个岛i出发,只建造一座桥.桥的长度以Li表示.公园内总共有N座桥.尽管每座桥由一个岛连到另一个岛,但每座桥均可以双向行走.同时,每一对这样的岛屿,都有一艘专用的往来两岛之间的渡船. 相对于乘船而言,你更喜欢步行.你希望所经过的桥的总长度尽可能的长,但受到以下的限制. • 可以自行挑选一个岛开始游览. • 任何一个岛都不能游览一次以上. • 无论任何时间你都可以由你现在所在的岛S去另一个你从未到过的岛D.由S到D可以有以下方法: o 步…
非递归版4S /************************************************************** Problem: 1791 User: 18357 Language: C++ Result: Accepted Time:4556 ms Memory:120132 kb ****************************************************************/ #include <cstdio> #includ…
  1791: [Ioi2008]Island 岛屿  Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 908  Solved: 159 [Submit][id=1791" target="_blank">Status] Description 你将要游览一个有N个岛屿的公园.从每个岛i出发,仅仅建造一座桥.桥的长度以Li表示.公园内总共同拥有N座桥. 虽然每座桥由一个岛连到还有一个岛.但每座桥均能够双向行走.同一…
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1791 题目大意:给你一棵n条边的基环树森林,要你求出所有基环树/树的直径之和.n<=1e6 题解:基环树DP写的很少…… 树的直径不用解释了,就是NOIP2018D1T3的20分做法,基环树直径,我们可以yy一下然后就能发现答案是2种:1.把环剖去以后其余的子树的直径.2.环上的一部分+选中的2点中各自的最长链. 第一种可以直接dfs求解,对于第二种……我们可以摒弃垃圾的dfs两遍求树…
第一题第二题鉴上我前几篇博客poj1985 poj1849:https://www.cnblogs.com/Tyouchie/p/10384379.html 第三题:数的重心:poj1655 来自sjh大佬的版子,邻接表写法 #include<algorithm> #include<bitset> #include<cctype> #include<cerrno> #include<clocale> #include<cmath> #…
题目描述 你将要游览一个有N个岛屿的公园.从每一个岛i出发,只建造一座桥.桥的长度以Li表示.公园内总共有N座桥.尽管每座桥由一个岛连到另一个岛,但每座桥均可以双向行走.同时,每一对这样的岛屿,都有一艘专用的往来两岛之间的渡船.  相对于乘船而言,你更喜欢步行.你希望所经过的桥的总长度尽可能的长,但受到以下的限制.  • 可以自行挑选一个岛开始游览.  • 任何一个岛都不能游览一次以上.  • 无论任何时间你都可以由你现在所在的岛S去另一个你从未到过的岛D.由S到D可以有以下方法:  o 步行:…
我太菜了居然调了一上午-- 这个题就是要求基环树森林的基环树直径和 大概步骤就是找环->dp找每个环点最远能到达距离作为点权->复制一倍环,单调队列dp 找环是可以拓扑的,但是利用性质有更快好写的做法,就是像朱刘算法找环那样,按照输入的方向(i->to_i)打一圈标记,如果碰到同样标记就说明有环,这里注意我一开始没注意到的,从i点进入找到环不代表i点在环上,因为可能是6字形的,所以一定是环点的是找到的有同样标记的那个点,然后顺着这个点把环点都放进一个栈(其实不用,但是这样好写一些),顺着…
基环树直径裸题. 首先基环树直径只可能有两种形式:每棵基环树中的环上挂着的树的直径,或者是挂在环上的两个树的最大深度根之间的距离之和. 所以,先对每个连通块跑一遍,把环上的点找出来,然后对环上每个点跑一遍树的直径(这里采用DP形式,可以顺便求出最大深度,注意DP树的直径方法..就是考虑跨过每个点的链..见lyd书树的直径一章). 然后就变成了环上每个点有权值,求最大价值.````` 基环树上的环处理起来方法比较多,这里由于是DP,采用断环成链的方法,把环复制两遍,然后对第二份进行DP,就可以转化…
IOI2008/BZOJ1791 岛屿 题目大意是在一个基环树森林里求每一棵基环树的直径①的和. 其实就是树的直径的基环树升级版.我们先把环找出来,然后从环上的每一个节点x出发,并且不经过环上其他节点,做一次树形DP,求出x的子树中到x最远的路径长d[x]和x的子树的直径dp[x]. 那么基环树的直径只有两种情况: 1.直径不经过环上的节点 对于每一个dp[x]取max就好了. 2.直径经过环上的节点 对于任意环上的两个节点x和y,都可以构成一条路径d[x]+d[y]+dist(x,y),其中d…