qoj6662
留待有缘人修补此题翻译
qoj6662 外环路
题目描述
在遥远的未来,人类进入了许多外星行星。行星X也是其中之一,太空探索公司MR在行星X上建立了基地,进行探测和资源采集活动。
行星X有连接 \(N\) 个基地和 \(N-1\) 个连接着基地的双向通道,可以使用通道往返任意两个不同的基地。也就是说,行星X的基地和通道形成树形结构。
基地上分别贴着 \(0\) 以上 \(N-1\) 以下的不同编号。另外,对于所有 \(0≤i≤N-2\), \(i\) 号通道连接 \(U[i]\) 号基地和 \(V[i]\) 号基地,通道长度为 \(W[i]\) km。
不知不觉中,行星X的开发也进入了稳定期。由于维护所有基地和通道费用高昂,MR决定只保留部分基地,禁用其余基地。
对于任何 \((s,e)(0≤s≤e≤N-1),s,s+1,…,\) 就说只留下 \(e\) 号基地吧。
此时维护成本定义如下:
-
选择0条以上的通道,满足以下条件:这时,选择通道的长度之和最小。(如果选择0条通道,长度之和为0公里。)
对于任意 \(u,v (s≤u<v≤e)\),只能使用选择的通道往返于u号基地和v号基地。中间经过停用的基地是没有关系的。
-
当被选择的偶数通道的长度之和为 \(C\) km时,维护费用为 \(C\)。
因为还没有决定留下什么样的基地,MR首先是所有可能的 \((i,j)(0≤i≤j≤N-1)\)
对于一对 \(i,i+1,…,j\) 我想知道只留下 \(j\) 号基地
大家应该为MR求这个值。但是,由于值可能会变得很大,所以需要求模1000 000 007的余数。
输入规定
大家要实现以下函数。
int maintenance_costs_sum(vector<int> U, vector<int> V, vector<int> W)
- 该函数只被调用一次。
- U、V、W:大小为 \(N-1\) 的整数数组。对于所有\(i(0≤i≤N-2)\),将\(U[i]\)号基地和\(V[i]\)号基地连接的路为\(W[i]\)km的通道。
- 对于所有可能的\((i,j)(0≤i≤j≤N-1)\)对,此函数为 \(i,i+1,…,\)只留下 \(j\) 号基地时的费用
必须返还费用加起来的值除以1000 000 007的余额。
不能在提交的源代码的任何部分运行I/O函数。
数据规模
- \(2 ≤ N ≤ 250 000\)
- $0 ≤ U[i], V [i] ≤ N − 1; U[i] \neq V [i] (0 ≤ i ≤ N − 2) $
- \(1 ≤ W[i] ≤ 10^9 (0 ≤ i ≤ N − 2)\)
样例格式
以下格式接收输入:
• Line \(1\): \(N\)
• Line \(2 + i (0 ≤ i ≤ N − 2)\): \(U[i] \ V[i] \ W[i]\)
输出以下内容:
•Line \(1\): maintenance_costs_sum返回的值
请注意,样例可能与实际评分中使用的测试点不同
csy 大佬的思路
•首先,没有奇环等价于是二分图。
•也就是我们要给每个点染黑或白,然后删掉所有两个点颜色相同的边。
•对于一个连通块,我们定义其中的“界点”为:有至少一条不在连通块内的边与之相邻的点。
•我们发现这张图中,原树的一棵子树对应的连通块界点个数 <=3。(也就是说树宽<=3)
•而对于一个连通块,我们接下来只关心它界点的状态。
•于是设 f[x][0/1][0/1][0/1] 表示考虑 x 的子树,三个界点分别染什么颜色,连通块内部的最小代价。
•时间复杂度为 O(n)。
梦与现实间挣扎着,所求为何
你可以借走我的文章,但你借不走我的智慧 虽然我是傻逼本文来自博客园,作者:cztq,转载请注明原文链接:https://www.cnblogs.com/cztq/p/17543719.html

浙公网安备 33010602011771号