题目链接:https://www.luogu.com.cn/problem/P1344
这显然是一道网络流题目
第一问裸的最大流
关键在于第二问怎么求
一个很妙的做法是将边权乘上大常数再加1,这样分成了两部分,前面的代表流量,后面代表割的边数。
由于乘上一个大常数,所以新图的最小割等价于原图的最小割情况下加上割的边数(边数不影响流量)
然后求新图最小割即可
C o d e Code Code
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
#define int long long
const int MAXM = 1000, MAXN = 32, inf = 10000000000000000;
struct w{
int to, nx, f;
}head[MAXM + MAXM + 10];
int a[MAXN + 10], now[MAXN + 10], d[MAXN + 10], tot = 1;
inline void add(int x, int y, int i, int f){
head[i].to = y, head[i].nx