原題鏈結
ford-fulkerson
從源點開始
往下搜
搜的途中
構建反向邊
正向邊容量減少
反向變容量增加
#include
#include
#include
#include
#include
#include
#include
#define max 99999999
using
namespace
std;
struct nico
;vector
map[10005];
int f,d,flow,n,m,s,t,u,v,w,used[10005];
void add(int ui,int vi,int wi)
); map[vi].push_back((nico));
}int dfs(int sr,int tr,int fl)
}
}}int maxflow(int sr,int tr)
}int main()
ans=maxflow(s,t);
printf("%d",ans);
return
0;}
ek
大體思路是廣搜
搜到每條路
記錄路徑
流量變成min(當前流量,容量)
#include
#include
#include
#include
#include
#include
#include
#define max 99999999
using
namespace
std;
struct nico
;struct maki
pre[10005];
vector
map[10005];
queue
q;int n,m,s,t,flo[10005],flow,incr;
void add(int from,int to,int val)
); map[to].push_back((nico));
}int bfs(int sr,int tr)
q.push(sr);
flo[sr]=max;
pre[sr].p=0;
while(!q.empty()) }}
if(pre[tr].p==-1) return -1;
return flo[tr];
}int maxflow(int sr,int tr)
flow+=incr;
incr=bfs(sr,tr);
}return flow;
}int main()
ans=maxflow(s,t);
printf("%d",ans);
return
0;}
dinic
多加了個深度
把上面的板子拼一拼
#include
#include
#include
#include
#include
#include
#include
#define max 99999999
using
namespace
std;
struct nico
;queue
q;vector
map[10005];
int n,m,s,t,dep[10005],flow;
void add(int from,int to,int val)
); map[to].push_back((nico));
}int bfs(int sr,int tr)}}
if(dep[t]!=-1) return dep[t];
return0;}
int dfs(int sr,int tr,int fl)
}return0;}
int dinic(int sr,int tr)
}return flow;
}int main()
ans=dinic(s,t);
printf("%d",ans);
return
0;}
模板 網路最大流 最大流
給出乙個網路圖,以及其源點和匯點,求出其網路最大流。in put role presentation inp utin put4 5 4 3 4 2 30 4 3 20 2 3 20 2 1 30 1 3 40ou tput role presentation out puto utpu t50最大...
模板 網路最大流 最大流
給出乙個網路圖,以及其源點和匯點,求出其網路最大流。in put role presentation inp utin put4 5 4 3 4 2 30 4 3 20 2 3 20 2 1 30 1 3 40ou tput role presentation out puto utpu t50最大...
模板 網路最大流
題目描述 如題,給出乙個網路圖,以及其源點和匯點,求出其網路最大流。輸入輸出格式 輸入格式 第一行包含四個正整數n m s t,分別表示點的個數 有向邊的個數 源點序號 匯點序號。接下來m行每行包含三個正整數ui vi wi,表示第i條有向邊從ui出發,到達vi,邊權為wi 即該邊最大流量為wi 輸...