首页 > TAG信息列表 > ioi2008
洛谷 P4381 [IOI2008] Island(基环树,单调队列,断环为链)
传送门 解题思路 简要来说就是求每一个基环树的直径的和。 想起来很好想,就是把环上每个节点挂的子树的深度的信息挂到环上的节点上,然后断环为链,找一段最大的区间使得dep[a]+dep[b]+dis[a,b] 最大,dis[a,b] 又可以用前缀和预处理成 dis[b]-dis[a],于是式子变成了dep[a]-dis[a]+dep[b「题解」IOI2008 Island
Problem Link 题意: 求点数为 \(n\) 的基环树森林的直径和。 Solution 对于一棵树的直径是很简单的,可以用 DP 或者搜索完成。 对于基环树,我们可以借鉴树的 DP 思路。 树上的 DP 思路: 定义 \(D_i\) 表示从点 \(i\) 到以 \(i\) 为根的子树能到的最远长度,\(S_i\) 表示以 \(i\) 为根P4381 [IOI2008] Island
【题意】 给一个基环树森林,求每个基环树的最长链之和 【分析】 对于每个基环树,我们可以把环先当成一个点看待,然后作为树的根节点 这时,直径有两种情况: 1.完全在根的一个子树内,不经过根 2.跨过根,位于两个子树内 可以先dfs一波找到环,然后计算第一种情况,对于根的每个子树进行以此树[IOI2008]Island
嘟嘟嘟 一句话题意:求带权基环树森林中每一个联通块的最长路之和,路径为简单路径。 其实这道题不难,只不过是吧好多知识拼接在了一起。 看到基环树,就会想到断环为链,为了能枚举到所有路径,要把链翻倍乘2。 现在得到了一个序列,上面的每一个点表示外向树的树根。 那么一条最长路可能有两[题解] LuoguP4381 [IOI2008]Island
LuoguP4381 [IOI2008]Island Description 一句话题意:给一个基环树森林,求每棵基环树的直径长度的和(基环树的直径定义与树类似,即基环树上一条最长的简单路径),节点总数不超过\(10^6\)。 Solution 问题就是如何求基环树的直径。 首先树的直径的话可以直接\(dp\),那如果有一个环怎么办?[IOI2008]Island
题目链接:Click here Solution: 一句话题意:给定基环树森林,求每颗基环树的直径之和 考虑基环树求直径的方法,考虑基环树套路,把环和树分开考虑 我们先把环找出来,对环上的点的子树求直径,再求出这个点开始的最长链,这个很简单,可以用treedp做 考虑一颗基环树的直径可能有哪些情况:基环树上[IOI2008]Island
基环树 找环,环外处理,环上处理 #include<bits/stdc++.h>#define re return#define inc(i,l,r) for(int i=l;i<=r;++i) using namespace std;template<typename T>inline void rd(T&x){ char c;bool f=0; while((c=getchar())<'0'||c>'9[IOI2008] Fish 鱼
https://www.luogu.org/recordnew/lists?uid=56840 题解 首先可以发现我们对于每种颜色的鱼,长一点的能够覆盖的方案已定完全包含短一点的方案。 所以我们可以只对每种颜色最长的鱼计算贡献。 然后有一个\(naive\)的想法,我们从按照最长的鱼的长度小到大枚举每种颜色,然后算出那条最长[ioi2008]Island 岛屿
题目描述 你将要游览一个有N个岛屿的公园。从每一个岛i出发,只建造一座桥。桥的长度以Li表示。公园内总共有N座桥。尽管每座桥由一个岛连到另一个岛,但每座桥均可以双向行走。同时,每一对这样的岛屿,都有一艘专用的往来两岛之间的渡船。 相对于乘船而言,你更喜欢步行。你希望所经过的桥