最小割的唯一性判定 ZOJ2587 Unique Attack
题意
给定一个无向图, N 个点 M 条边,要求判断两个点 A 和 B 之间的最小割是否唯一。
思路
建立网络流模型,求出最大流后,在残余网络分别从 源点S 和 汇点T 开始沿着未饱和的边进行搜索,如果搜到的总的顶点的个数等于N,则说明最小割唯一,否则最小割不唯一。
我用的vector邻接表存的图,Dinic求的最大流
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <stack>
#include <queue>
#define INF 0x3f3f3f3f
#define MAX_N 1000
using namespace std;
int N, M, A, B;
bool vis[MAX_N];
//Dinic算法模板
struct edge {
int to, cap, rev;
};
vector<edge> G[MAX_N];
int level[MAX_N];
int iter[MAX_N];
void add_edge(int from, int to, int cap) {
G[from].push_back((edge) {to, cap, (int) G