题目来源:http://www.lydsy.com/JudgeOnline/problem.php?id=1797
这题考察判断网络流的可行割与必须割。
引用一下lydrainbowcat的结论
- 最小割的必须边
- 一定在最小割中的边、扩大容量后能增大最大流的边, ① 满流;② 残余网络中S能到入点、出点能到T。 从S开始DFS、T开始反向DFS,标记到达的点,然后枚举满流边即可。
- 最小割的可行边
- 被某一种最小割的方案包含的边, ① 满流;② 删掉之后在残余网络中找不到u到v的路径。 在残余网络中tarjan求SCC,(u,v)两点在同一SCC中说明残余网络中存在u到v路径。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <queue>
using namespace std;
const int N=5005,M=120005,inf=0x3fffffff;
int head[N],d[N],ver[M<<1],e[M<<1],next[M<<1];
int dfn[N],low[N],hav[N],bel[N],q[N<<1];
bool inq[N];
int tot=1,n,m,s,t,cnt=0,maxflow=0,top=