摘要:
http://acm.hit.edu.cn/hoj/problem/view?id=2715将每个格子 i 拆成两个点 i’, i’’并加边(i’, i’’, 1, -Vi), (i’, i’’, ∞, 0), (s, i’, ∞, 0); 控制只有一次能取到宝物。对相邻的四个格子 j, Hi > Hj 则加边(i’’, j’, ∞, 0);若格子 i 在边界上则加边(i’’, t, ∞, 0)。限制增广次数小于等于 K 求最小费用流即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include ... 阅读全文
摘要:
http://acm.hit.edu.cn/hoj/problem/view?id=25431.将原图中的每条边(u, v)拆成两条:(u, v, Ci, 0), (u, v, ∞, Ei)2.购买的每个石头的费用P加一条 (S, 1, inf, P)的边。3.总的能够花费的费用C可以在我们求最小费用路的时候判断。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 typedef long long LL; 10 const i... 阅读全文
摘要:
// 给定一个有向图,必须用若干个环来覆盖整个图,要求这些覆盖的环的权值最小。思路:原图每个点u 拆为u 和 u' ,从源点引容量为 1 费用为 0 的边到u ,从 u' 引相同性质的边到汇点,若原图中存在 (u, v) ,则从u 引容量为 1 费用为 c(u, v) 的边到 v' 。其实这里的源模拟的是出度,汇模拟的是入度,因为环中每个点的出度等于入度等于 1 ,那么如果最大流不等于顶点数 n ,则无解;否则,答案就是最小费用。 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 阅读全文