Island(IOI 2008) Description 你准备浏览一个公园,该公园由 N 个岛屿组成,当地管理部门从每个岛屿 i 出发向另外一个岛屿建了一座长度为 L_i 的桥,不过桥是可以双向行走的.同时,每对岛屿之间都有一艘专用的往来两岛之间的渡船.相对于乘船而言,你更喜欢步行.你希望经过的桥的总长度尽可能长,但受到以下的限制: 可以自行挑选一个岛开始游览. 任何一个岛都不能游览一次以上. 无论任何时间,你都可以由当前所在的岛 S 去另一个从未到过的岛 D.从 S 到 D 有如下方法: 步…
P4381 [IOI2008]Island 题意:求图中所有基环树的直径和 我们对每棵基环树分别计算答案. 首先我们先bfs找环(dfs易爆栈) 蓝后我们处理直径 直径不在环上,就在环上某点的子树上 我们对于环上每个点的子树,跑一边dp求直径即可,顺带处理子树的最深深度(环上点到子树某个叶节点的最长距离)$dis[x]$ 在dfs求直径时顺带求直径的最大值(可能是整棵基环树的直径) 蓝后我们在环上跑一遍dp. 我们先破环成链(就是把长度为$n$的环转换成长$2n+1$的链) 偷个图 我们记链上前…
Description 你将要游览一个有N个岛屿的公园.从每一个岛i出发,只建造一座桥.桥的长度以Li表示.公园内总共有N座桥.尽管每座桥由一个岛连到另一个岛,但每座桥均可以双向行走.同时,每一对这样的岛屿,都有一艘专用的往来两岛之间的渡船. 相对于乘船而言,你更喜欢步行.你希望所经过的桥的总长度尽可能的长,但受到以下的限制. • 可以自行挑选一个岛开始游览. • 任何一个岛都不能游览一次以上. • 无论任何时间你都可以由你现在所在的岛S去另一个你从未到过的岛D.由S到D可以有以下方法: o 步…
原题传送门 题意:求基环树森林的直径(所有基环树直径之和) 首先,我们要对环上所有点的子树求出它们的直径和最大深度.然后,我们只用考虑在环上至少经过一条边的路径.那么,这种路径在环上一定有起始点和终点.(假设路径是从起始点开始,按顺时针方向走达到终点) 不妨枚举这段路径在环上的终点.由于规定了这个点和方向,我们就可以拆环了.然后是一个经典的技巧,把环上元素复制一遍,就可以枚举全部拆环方案.设环上有l个结点.那么,我们枚举终点,就相当于在长度为2l的数组上不断滑动一个长度为l的区间 剩下的问题与基…
传送门 显然题目给的图构成一个基环树森林 对于每个基环树单独考虑,显然每个都走直径是最优的 考虑如何求出基环树的直径 把直径分为两种情况考虑,首先可以找出环 因为直径可能不在环边上,所以对每个环上节点的子树进行一遍 $dfs$,求出每个节点子树的直径 维护 $dis[x]$ 表示节点 $x$ 到叶子节点的最长路程,那么直径就是每个节点儿子的 $dis$ 中最大和次大的和 可以一遍循环动态维护最大和次大 直径也可能在环上 设环上两点 $x,y$ 的距离为 $d(x,y)$,那么就是求最大的 $di…
LuoguP4381 [IOI2008]Island Description 一句话题意:给一个基环树森林,求每棵基环树的直径长度的和(基环树的直径定义与树类似,即基环树上一条最长的简单路径),节点总数不超过\(10^6\). Solution 问题就是如何求基环树的直径. 首先树的直径的话可以直接\(dp\),那如果有一个环怎么办? 这个环上会挂着几棵树,那么直径只会有两种情况 不经过环上的边,即每棵树直径的最大值 经过一个环,即挂在换上的两棵树\(i,j\)的深度和在加上\(i,j\)在环上…
一.题目 Description 你将要游览一个有N个岛屿的公园.从每一个岛i出发,只建造一座桥.桥的长度以Li表示.公园内总共有N座桥.尽管每座桥由一个岛连到另一个岛,但每座桥均可以双向行走.同时,每一对这样的岛屿,都有一艘专用的往来两岛之间的渡船. 相对于乘船而言,你更喜欢步行.你希望所经过的桥的总长度尽可能的长,但受到以下的限制. • 可以自行挑选一个岛开始游览. • 任何一个岛都不能游览一次以上. • 无论任何时间你都可以由你现在所在的岛S去另一个你从未到过的岛D.由S到D可以有以下方法…
非递归版4S /************************************************************** Problem: 1791 User: 18357 Language: C++ Result: Accepted Time:4556 ms Memory:120132 kb ****************************************************************/ #include <cstdio> #includ…
题目描述: bz luogu 题解: 裸的基环树直径. 代码: #include<queue> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; ; template<typename T> inline void read(T&x) { T f = ,c = ;char ch=getchar(…
  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座桥. 虽然每座桥由一个岛连到还有一个岛.但每座桥均能够双向行走.同一…