P11342 [KTSC 2023 R1] 外环道路 2
题目背景
**请勿使用 C++14 (GCC 9) 提交。**
请在程序开头加入如下代码:
```cpp
#include
long long place_police(std::vector P, std::vector C, std::vector W);
```
题目描述
**题目译自 [2023년도 국제정보올림피아드 대표학생 선발고사 - 1차 선발고사](https://www.ioikorea.kr/archives/ioitst/2023/) T2 「[외곽 순환 도로 2](https://assets.ioikorea.kr/ioitst/2023/1/ringroad2/ringroad2_statement.pdf)」**
KOI 城市由 $N$ 个交叉路口和 $N-1$ 条双向道路组成,任意两个不同的交叉路口都可以通过这些道路互相到达。也就是说,城市的道路网络是一个树结构。道路位于二维平面上,除了端点外,任何两条道路都不相交。每条道路都有一个非负整数的权重。
KOI 城市几十年前还是一个小村庄,但随着人口的涌入和城市的扩张,变得越来越大。在快速扩张的过程中,市长为了方便管理,给交叉路口编号为 $0$ 到 $N-1$。这种编号系统具有以下特性:
- $0$ 号交叉路口是城市的中心,保证至少有两条道路与其相连。
- 交叉路口的编号是以 $0$ 号交叉路口为根的树的前序遍历顺序之一。
- 对于每个交叉路口,考虑与其相邻的(直接连接的)交叉路口中编号最小的一个。从这个交叉路口开始,按逆时针方向列出相邻交叉路口的编号,编号是递增的。
随着越来越多的人涌入 KOI 城市,交通拥堵问题变得越来越严重。市长决定通过建设外环道路来解决这个问题。将所有只有一条道路相连的交叉路口按编号递增的顺序排列,得到列表 $\{V[0], V[1], \ldots, V[K-1]\}$。市长决定在所有 $i$ $(0 \leq i \leq K-1)$ 的情况下,建设连接 $V[i]$ 和 $V[(i+1) \bmod K]$ 的双向道路。每条道路的权重为非负整数 $W[i]$。根据编号系统的特性,可以确保这些外环道路不会在端点之外的任何位置相交。
KOI 城市的邪恶犯罪团伙 Dlalswp 对市民造成了很大伤害。市长决定派遣情报人员来抓捕 Dlalswp 犯罪团伙。根据情报,Dlalswp 犯罪团伙将长度为奇数的简单环作为犯罪区域,并在这些环上进行犯罪活动。
为了抓捕臭名昭著的 Dlalswp 犯罪团伙,市长决定在所有长度为奇数的简单环上部署警察。每条道路上部署警察的成本等于该道路的权重。请计算市长实现目标所需的最小成本。
你需要实现以下函数:
```cpp
long long place_police(vector P, vector C, vector W);
```
- 该函数只会被调用一次。
- `P`:大小为 $N-1$ 的整数数组,表示建设外环道路前 KOI 城市的原始道路。对于每个 $0 \leq i \leq N-2$,存在一条连接 $P[i]$ 和 $i+1$ 的道路。
- `C`:大小为 $N-1$ 的整数数组。对于每个 $i$ $(0 \leq i \leq N-2)$,连接 $P[i]$ 和 $i+1$ 的道路的权重为 $C[i]$。
- `W`:大小为 $K$ 的整数数组。对于每个 $i$ $(0 \leq i \leq K-1)$,连接 $V[i]$ 和 $V[(i+1) \bmod K]$ 的双向道路的权重为 $W[i]$。
- 该函数返回在所有长度为奇数的简单环上部署警察的最小成本。
注意,提交的代码中不应包含任何输入输出操作。
输入格式
示例评测程序按以下格式读取输入:
- 第 $1$ 行:$N$
- 第 $2+i$ $(0 \leq i \leq N-2)$ 行:$P[i]\,C[i]$
- 第 $1+N$ 行:$W[0]\,W[1]\,\cdots\,W[K-1]$
输出格式
示例评测程序按以下格式输出:
- 第 $1$ 行:函数 `place_police` 返回的值
说明/提示
### 样例 1 解释
考虑 $N=4, P=[0,0,0], C=[9,8,0], W=[9,9,9]$ 的情况。
评测程序将调用如下函数:
```cpp
place_police([0, 0, 0], [9, 8, 0], [9, 9, 9]);
```
KOI 城市中共有 $4$ 个奇数环,分别是 $\{0,1,2\},\{0,2,3\},\{0,3,1\},\{1,2,3\}$。如果市长在连接 $(0,3)$ 的权重为 $0$ 的道路和连接 $(1,2)$ 的权重为 $9$ 的道路上部署警察,那么所有奇数环上至少有一条道路上部署了警察。这个部署的成本是 $0+9=9$,这是实现目标的最小成本。
函数应返回 `9`。
### 样例 2 解释
考虑 $N=11$,
$P=[0,0,2,3,3,2,0,7,7,9]$,
$C=[9,8,0,7,1,6,0,7,1,6]$,
$W=[1000000000000, \ldots, 1000000000000]$ 的情况。$W$ 的大小为 $6$,所有元素均为 $10^{12}$。
评测程序将调用如下函数:
```cpp
place_police([0, 0, 2, 3, 3, 2, 0, 7, 7, 9], [9, 8, 0, 7, 1, 6, 0, 7, 1, 6], [1000000000000, 1000000000000, 1000000000000, 1000000000000, 1000000000000, 1000000000000]);
```
如果市长在连接 $(2,3)$ 的权重为 0 的道路、连接 $(0,7)$ 的权重为 0 的道路和连接 $(3,5)$ 的权重为 1 的道路上部署警察,那么所有奇数环上至少有一条道路上部署了警察。这个部署的成本是 $0+0+1=1$,这是实现目标的最小成本。
函数应返回 `1`。
### 数据范围
对于所有输入数据,满足:
- $4 \leq N \leq 10^5$
- 对于所有 $i$ $(0 \leq i \leq N-2)$,$0 \leq P[i] \leq i$
- 对于所有 $i$ $(0 \leq i \leq N-2)$,$0 \leq C[i] \leq 10^{12}$
- 对于所有 $i$ $(0 \leq i \leq K-1)$,$0 \leq W[i] \leq 10^{12}$
详细子任务附加限制及分值如下表所示。
| 子任务 | 分值 | 附加限制 |
| :-: | :-: | :-: |
| $1$ | $6$ | $K \leq 5$ |
| $2$ | $8$ | 对于所有 $i$ $(0 \leq i \leq N-2)$,$P[i]=0$ |
| $3$ | $5$ | 对于所有 $i$ $(0 \leq i \leq N-2)$,$C[i] \leq 10^{6}$;对于所有 $i$ $(0 \leq i \leq K-1)$,$W[i]=10^{12}$;$K$ 为偶数 |
| $4$ | $15$ | 对于所有 $i$ $(0 \leq i \leq N-2)$,$C[i] \leq 10^{6}$;对于所有 $i$ $(0 \leq i \leq K-1)$,$W[i]=10^{12}$ |
| $5$ | $57$ | 不存在与 $4$ 条以上道路相连的交叉路口 |
| $6$ | $9$ | 无附加限制 |