P13078 [NOISG 2019] Rigged Roads
题目背景
Silvermill 最近财政紧张,市长 Peanut 打算拆除部分道路以节省养护成本。
题目描述
Silvermill 可以看作一个城市,包含 $N$ 个道路交汇点和 $E$ 条道路,第 $i$ 条道路连接交汇点 $A_i$ 和 $B_i$。交汇点编号为 $1$ 到 $N$,道路编号为 $1$ 到 $E$。保证任意两个交汇点之间总可以直接或间接到达,且没有两条道路连接同一对交汇点。
为了方便决策,Peanut 请你帮忙评估各条道路的养护成本。你的任务是:
你需要给出一个长度为 $E$ 的排列 $W = (W_1, W_2, \dots, W_E)$,表示第 $i$ 条道路的养护成本为 $W_i$,其中 $W$ 是 $1$ 到 $E$ 的一个排列。
Peanut 会根据你提供的养护成本,保留一组道路,满足:
- 所有交汇点仍然连通;
- 保留道路的养护成本之和最小。
即,Peanut 实际上会选择最小生成树,且由于所有成本互不相同,最小生成树唯一。
但你另有所图。你想让最终被保留的道路集合恰好是你指定的一组道路 $R$,且 $R$ 恰好构成一棵生成树。通过合理选择 $W$,你可以让 $R$ 恰好成为最小生成树。
请你计算,满足上述条件的字典序最小的排列 $W$。
给定城市结构和你想保留的道路集合 $R$,请输出字典序最小的养护成本分配方案 $W$,使得 $R$ 成为唯一的最小生成树。
注:若存在第 $1 \leq p \leq E$ 使得 $W_p < W'_p$,且 $W_1 = W'_1, \dots, W_{p-1} = W'_{p-1}$,则 $W$ 的字典序小于 $W'$。
输入格式
第一行包含两个整数 $N$ 和 $E$。
接下来 $E$ 行,每行两个整数 $A_i$ 和 $B_i$,表示第 $i$ 条道路连接的两个交汇点。
最后一行包含 $N - 1$ 个整数,表示你想保留的道路编号,构成的集合 $R$。
输出格式
输出 $E$ 个整数,表示字典序最小的排列 $W$,第 $i$ 个数是第 $i$ 条道路的养护成本。
说明/提示
【数据范围】
- $1 \leq N, E \leq 3 \times 10^5$
- $1 \leq A_i \neq B_i \leq N$
- $1 \leq R_i \leq E$
- 仅使用 $R$ 中的道路也能保证所有交汇点连通。
| 子任务编号 | 分值 | 额外限制 |
| :---: | :---: | :---: |
| $1$ | $8$ | $1 \leq N, E \leq 9$ |
| $2$ | $19$ | $1 \leq N, E \leq 10^3$ |
| $3$ | $9$ | $A_{R_i} = 1,\ B_{R_i} = i + 1$,即 $R$ 构成一棵星形树 |
| $4$ | $10$ | $A_{R_i} = i,\ B_{R_i} = i + 1$,即 $R$ 构成一条链 |
| $5$ | $10$ | $E = N,\ A_i = i,\ B_i = i \bmod N + 1$ |
| $6$ | $12$ | $E = N$ |
| $7$ | $32$ | 无额外限制 |