费用流
例题
代码
习题
已知 \(k\) 和 \(n\) 个开区间, \((L_i,R_i)\), 每个点至多被 \(k\) 个区间覆盖
问任选开区间所能得到的区间长度的和的最大值.

代码
| C++ | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | |
\(n\) 个点, \(m\) 条无向边, 问从 \(1\) 到 \(n\) 再回到 \(1\) 且不能经过除了 \(1\) 之外的点两次的最长路径.
对每个点分为出点和入点,
对于每个点, 自己的入点连接自己的出点, 容量为 \(1\), 费用为 \(1\), 起点和终点的容量为 \(2\),
对于每条边出点连接入点, 容量为 \(1\), 费用为 \(0\), 跑最大费用最大流.
最大流为 \(2\), 说明从 \(1\) 到 \(n\) 有两条不相交的路径,
最大流为 \(1\) 时, 要特判是否有直接从 \(1\) 到 \(n\) 的边,
其余情况均为无解.
代码
| C++ | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | |