#P4153. [WC2015] k 小割

    ID: 4863 远端评测题 2000ms 128MiB 尝试: 0 已通过: 0 显示难度NOI/NOI+/CTS 上传者: 标签>搜索2015O2优化优先队列最小割WC

[WC2015] k 小割

题目描述

给出一个有向带权网络 G=(V,E)G = (V, E),权值函数 w:E→Z∗w: E \rightarrow \mathbb{Z^{*}}(即任意边 ee 的权值 w(e)w(e) 均为正整数),和点 s,t∈Vs, t \in V,使得在 G′=(V,E−S)G' = (V, E - S) 上不存在 ss 到 tt 的路径。

设 S\mathfrak{S} 是所有满足条件的边集 SS 的全集,按 w(S)w(S) 从小到大输出 S\mathfrak{S} 中前 kk 小的边集的边权和。其中 w(S)=∑e∈Sw(e)w(S) = \sum_{e \in S} w(e)。

输入格式

第一行包含 55 个正整数 n,m,s,t,kn, m, s, t, k,其中 s,t,ks, t, k 意义如上,n,mn, m 分别表示 ∣V∣,∣E∣\lvert V \rvert, \lvert E \rvert(即点数和边数)。规定图中的节点用 11 到 nn 的整数表示。保证 s≠ts \neq t。

接下来 mm 行,每行 33 个整数 x,y,zx, y, z,表示一条边权为 zz 的从 xx 到 yy 的边。可能有重边但保证没有自环。

输出格式

如果 ∣S∣<k\lvert \mathfrak{S} \rvert < k,先输出 ∣S∣\lvert \mathfrak{S} \rvert 行,每行包含一个整数,表示前 ∣S∣\lvert \mathfrak{S} \rvert 个 w(S)w(S);再输出一行一个整数 −1-1。

如果 ∣S∣≥k\lvert \mathfrak{S} \rvert \geq k,则输出 kk 行,表示前 kk 个 w(S)w(S)。

两种情况均需按照 w(S)w(S) 从小到大输出。

3 3 1 3 100
1 2 3
2 3 4
1 3 5

8
9
12
-1

5 8 1 5 10
1 2 45176
1 3 41088
1 4 32001
2 5 48931
3 5 39291
4 5 28970
2 3 48131
4 2 49795

116468
117192
118265
120223
145438
147235
149193
157556
158280
161311

提示

测试点编号 n≤n \le mm k≤k \le 约束
1∼21 \sim 2 1010 ≤20\le 20 106{10}^6 边权不超过 6553665536
3∼63 \sim 6 5050 ≤100\le 100 100100
7∼107 \sim 10 30003000 =2n−4= 2 n - 4 5×1055 \times {10}^5 ss 有边连向所有非 tt 节点,所有非 ss 结点有边连向 tt,边权不超过 231−12^{31} - 1
11∼1411 \sim 14 1.5×1051.5 \times {10}^5
15∼2015 \sim 20 5050 ≤1500\le 1500 100100 边权不超过 6553665536