在这份代码中,有两个明显的问题。
在同时修改当前边和反向边的残量时,使用了错误的方法:
int res=dfs(v,min(flow,e[i].cap),en); e[i].cap-=res; e[i+(i%2)].cap+=res; //这里
边 111 和 222 互为反向边,然而当通过 222 时,边 111 不会被修改,而边 222 会先加再减,相当于没有修改。
然后 bfs 的时候把 queue 写成 stack 了,也能过:
bfs
queue
stack
stack <int> q;
有点离谱了