网络流
直接贴代码(Dinic)
struct node
{
int next, to, val, type, from;
}a[160005];
int head[100005], cnt = 1, first[100005], T = 100000;
void add(int x, int y, int w, int ty)
{
a[++ cnt].next = head[x];
a[cnt].to = y;
a[cnt].val = w;
a[cnt].type = ty;
a[cnt].from = x;
head[x] = cnt;
}
int dep[100005];
bool bfs(int U)
{
queue<int> q;
q.push(U);
memset(dep, 0x3f, sizeof(dep));
dep[U] = 1;
while(!q.empty())
{
int u = q.front();
q.pop();
for(int i = head[u]; i != 0; i = a[i].next)
{
int v = a[i].to;
if(a[i].val > 0 && dep[v] > dep[u] + 1)
{
dep[v] = dep[u] + 1;
q.push(v);
}
}
}
return dep[T] != 0x3f3f3f3f;
}
int dfs(int u, int lim)
{
if(u == T) return lim;
int flow = 0, i;
for(i = first[u]; i != 0; i = a[i].next)
{
int v = a[i].to;
if(a[i].val > 0 && dep[v] == dep[u] + 1)
{
int del = dfs(v, min(lim - flow, a[i].val));
if(del == 0) dep[v] = -1;
a[i].val -= del;
a[i ^ 1].val += del;
flow += del;
if(flow == lim) break;
}
}
first[u] = i;
return flow;
}
最小割
最小割等于最大流
hello, I'm yuzihang, if you need to copy this, please quote this url: https://www.cnblogs.com/yuzihang/p/18815309