构图思路: 1.将所有顶点v拆成两个点, v1,v2 2.源点S与v1连边,容量为 W- 3.v2与汇点连边,容量为 W+ 4.对图中原边( a, b ), 连边 (a1,b2),容量为正无穷大 则该图的最小割(最大流)即为最小花费. 简单证明: 根据ST割集的定义,将顶点分成两个点集.所以对于原图中的边(a,b),转换成 S->a1->b2->T. 则此时路径必定存在 一条割边,因为a1->b2为无穷大,所以割边必定是 S->a1 or b2->T,  若为前者则意味…
Destroying The Graph Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8311   Accepted: 2677   Special Judge Description Alice and Bob play the following game. First, Alice draws some directed graph with N vertices and M arcs. After that B…
题意:给一张图,现在要删去所有的边,删去一个点的所有入边和所有出边都有其对应\(W_{i+}\)和\(W_{i-}\).求删去该图的最小花费,并输出解 分析:简而言之就是用最小权值的点集去覆盖所有的边. 模型转化到网络流的建图中,将图中的边视作点,并将其一拆为二,出点作为X部,入点作为Y部,若有边(u,v)则由建边u->v+N,容量正无穷. 将原图中的点视作边,入边的花费即建边i+N->T,容量为其花费;出边的花费建边S->i,容量也是为其花费. 跑出S->T的最大流,|最大流|…
题意 有一个图, 两种操作,一种是删除某点的所有出边,一种是删除某点的所有入边,各个点的不同操作分别有一个花费,现在我们想把这个图的边都删除掉,需要的最小花费是多少. 思路 很明显的二分图最小点权覆盖集.WA在输出最小割方案上. [输出最小割方案]从源点S做一次DFS遍历,标记所有访问到的点,这些点就是S点集.然后对于每一条满流边,如果其两端点一个在S点集一个不在则该边就是此方案下的最小割边. 代码 [cpp] #include <iostream> #include <cstdio&g…
Destroying The Graph http://poj.org/problem?id=2125 Time Limit: 2000MS   Memory Limit: 65536K           Description Alice and Bob play the following game. First, Alice draws some directed graph with N vertices and M arcs. After that Bob tries to dest…
Destroying The Graph Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8198   Accepted: 2635   Special Judge Description Alice and Bob play the following game. First, Alice draws some directed graph with N vertices and M arcs. After that B…
Destroying The Graph   Description Alice and Bob play the following game. First, Alice draws some directed graph with N vertices and M arcs. After that Bob tries to destroy it. In a move he may take any vertex of the graph and remove either all arcs…
POJ2125 题意简述:给定一个有向图,要通过某些操作删除所有的边,每一次操作可以选择任意一个节点删除由其出发的所有边或者通向它的所有边,两个方向有不同的权值.问最小权值和的解决方案,要输出操作. 乍一看是要用点去覆盖边,联想到二分图的最小点权覆盖,通过拆点,我们可以得到二分图.每个点都拆成两个点,一个作为入点,另一个作为出点.于是我们构建了一个标准的二分图最小点权覆盖的模型 解决二分图最小点权覆盖的的算法并不复杂,创造一个源点和汇点,源点到左边的点连边,容量为对应点的权值,同理右边的点向汇点…
题链: http://poj.org/problem?id=2125 题解: 最小割 + 输出割方案.建图:拆点,每个题拆为 i 和 i'分别表示其的入点和出点建立超源 S和超汇 T.S -> i :(outi[i]) 割了这个边相当于选择了 i-i'-> T :(ini[i])  割了这个边相当于选择了 i+u -> v':(INF)然后求Dinic跑最大流求最小割. 至于求方案,首先显然割的边都和 S或 T相连.从 S开始沿着非满载的边(包括反向边)dfs,对遇到的点打标记. 如果某…
题目:http://poj.org/problem?id=3469 最小割裸题. 那个限制就是在 i.j 之间连双向边. 根据本题能引出网络流中二元关系的种种. 别忘了写 if ( x==n+1 ) return flow ; ! #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; ,M=2e5+,INF=0x3f3f3f3f;…