机缘巧合之下看到这道最小割模板,就写了,然后T飞,接着改了小小的一处就A了,只改了下面这段(dinic中DFS的部分):
原
for(int &i = now[u];i && sum;i = e[i].nxt)
{
int v = e[i].to;
if(dep[v] != dep[u] + 1 || !e[i].val)continue;
int tmp = DFS(v, min(sum, e[i].val));
e[i].val -= tmp, e[i ^ 1].val += tmp;
sum -= tmp, res += tmp;
}
改后
for(int &i = now[u];i && sum;i = e[i].nxt)
{
int v = e[i].to;
if(dep[v] != dep[u] + 1 || !e[i].val)continue;
int tmp = DFS(v, min(sum, e[i].val));
e[i].val -= tmp, e[i ^ 1].val += tmp;
sum -= tmp, res += tmp;
if(!sum)return res;
}
不知道为什么,发帖求教