21 graph[from].push_back(Edge(from,to,cap,graph[to].size(),
false));
22 graph[to].push_back(Edge(to,from,0,graph[from].size()-1,
true));
26 vector<vector<Edge>> graph;
27 vector<
int> level,iter;
29 fill(level.begin(),level.end(),-1);
36 for(
auto &e:graph[v]) {
37 if(e.cap>0&&level[e.to]<0) {
38 level[e.to]=level[v]+1;
44 ll dfs(
int v,
int t, ll f) {
46 for(
int& i=iter[v]; i<(
int)graph[v].size(); i++) {
48 if(e.cap>0&&level[v]<level[e.to]) {
49 ll d=dfs(e.to,t,min(f,e.cap));
51 e.cap-=d,graph[e.to][e.rev].cap+=d;
52 e.flow+=d,graph[e.to][e.rev].flow-=d;
67 if(level[t]==-1)
return ret;
68 fill(iter.begin(),iter.end(),0);
70 while((f=dfs(s,t,
INFL))>0) ret+=f;
77 vector<
int> ret(graph.size());
84 for(
auto& e:graph[v]) {
85 if(e.cap>0&&!ret[e.to]) {
97 for(
int i=0; i<graph.size(); i++)
for(
auto &e:graph[i])
if(!e.isrev) ret.push_back(e);