将当前弧优化的方式改一下就跑的飞快。
int dfs(int u, int flow) {
if (u == t) return flow;
int rest = flow;
for (int &i = now[u]; i && rest; i = edge[i].next) {
int v = edge[i].to;
if (edge[i].dis && d[v] == d[u] + 1) {
int k = dfs(v, min(rest, edge[i].dis));
if (!k) d[v] = 0;
rest -= k;
edge[i].dis -= k;
edge[i ^ 1].dis += k;
}
}
return flow - rest;
}
这种方式会T掉 甚至不加当前弧优化还更慢测评记录
int dfs(int u, int flow) {
if (u == t) return flow;
int rest = flow;
for (int i = now[u]; i && rest; i = edge[i].next) {
int v = edge[i].to;
now[u] = i;
if (edge[i].dis && d[v] == d[u] + 1) {
int k = dfs(v, min(rest, edge[i].dis));
if (!k) d[v] = 0;
rest -= k;
edge[i].dis -= k;
edge[i ^ 1].dis += k;
}
}
return flow - rest;
}
这么写就跑的飞快测评记录