Problem
游行
Time Limit:
Memory Limit:
Description
每年春季,在某岛屿上都会举行游行活动。
在这个岛屿上有个城市,条连接着城市的有向道路。
你要安排英雄们的巡游。英雄从城市出发,经过若干个城市,到城市结束,需要特别注意的是,每个英雄的巡游的可以和相同,但是必须至少途径2个城市。
每次游行你的花费将由部分构成:
- 每个英雄游行经过的距离之和,需要特别注意的是,假如一条边被途径了次,那么它对答案的贡献是,表示这条边的边权。
- 如果一个英雄的巡游的不等于,那么会额外增加的费用。因为英雄要打的回到起点。
- 如果一个城市没有任何一个英雄途经,那么这个城市会很不高兴,需要费用的补偿。
你有无数个的英雄。你要合理安排游行方案,使得费用最小。
由于每年,值都是不一样的。所以你要回答个询问,每个询问都是,当为当前输入数值的时候的答案。
Input
第一行正整数 。
接下来的行,每行,表示有一条从到,边权为的有向道路。保证不会有自环,但不保证没有重边。
接下来行,每行一个,表示询问当每次费用为时的最小答案。
Output
Sample Input
1 | 6 5 3 |
Sample Output
1 | 6 |
HINT
样例说明
第一年的时候,只有。我们比较懒所以就不安排英雄出游了,需要支付的费用。
第二年的时候,我们可以这么安排:
一个英雄,需要付的费用,同时还要花5费用打的回家。再花的费用来补偿号城市和号城市。
第三年略。
数据范围
对于的数据,, , , , 。
标签:二分
费用流
Solution
比较难想但很奇妙的费用流建模。
题目可以转化为:选择若干条带权路径,选择指覆盖终点,所有没被覆盖的点都要付出的代价,每次给定求最小代价。
首先用算出多源最短路把每个点拆成入点和出点,建图:
容量 费用
容量 费用
容量 费用
每次增广均会有前面未覆盖的点被覆盖,即用增广一次的代价来代替。若增广前代价为,则增广后为。记录每次增广增加的费用,可知这个费用是单增的,推得当 时,可增广使答案变小,而当 时,继续增广会使答案变大。因此对每个询问二分出 的分界点计算答案即可。
Code
1 |
|