22 graph[from].push_back(Edge(from,to,cap,graph[to].size(),
false));
23 graph[to].push_back(Edge(to,from,0,graph[from].size()-1,
true));
27 vector<vector<Edge>> graph;
28 vector<
int> level,iter;
30 fill(level.begin(),level.end(),-1); level[s]=0;
31 queue<
int> que; que.push(s);
33 int v=que.front(); que.pop();
34 for(
auto &e: graph[v]) {
35 if(e.cap>0 && level[e.to]<0) {
36 level[e.to]=level[v]+1;
42 ll dfs(
int v,
int t, ll f) {
44 for(
int& i=iter[v]; i<(
int)graph[v].size(); i++) {
46 if(e.cap>0 && level[v]<level[e.to]) {
47 ll d=dfs(e.to,t,min(f,e.cap));
49 e.cap-=d,graph[e.to][e.rev].cap+=d;
50 e.flow+=d,graph[e.to][e.rev].flow-=d;
65 if(level[t]==-1)
return ret;
66 fill(iter.begin(),iter.end(),0);
68 while((f=dfs(s,t,
INFL))>0) ret+=f;
75 vector<
int> ret(graph.size()); ret[v]=
true;
76 queue<
int> que; que.push(v);
78 int v=que.front(); que.pop();
79 for(
auto& e:graph[v]) {
80 if(e.cap>0 && !ret[e.to] ) {
92 for(
int i=0; i<graph.size(); i++)
for(
auto &e: graph[i])
if(!e.isrev) ret.push_back(e);