dinic
来源:互联网 发布:php调用api接口 post 编辑:程序博客网 时间:2024/06/08 07:11
struct edge{ int to,cap,rev;//终点,容量,反向边};vector<edge>G[max_n];int level[max_n];//到源点的距离编号int iter[max_n];//当前弧void add_edge(int from,int to,int cap)//构造一条from到to的边和反向边{ G[from].push_back( (edge){to,cap,G[to].size()} ); G[to].push_back( (edge) {from,cap,G[from].size()-1 } );}void bfs(int s)//bfs决定到源点的距离{ memset(level,-1,sizeof(level)); queue<int>que; level[s]=0; que.push(s); while(!que.empty()) { int v=que.front(); que.pop(); for(int i=0;i<G[v].size();i++) { edge &e=G[v][i]; if(e.cap>0 && level[e.to]<0) { level[e.to]=level[v]+1; que.push(e.to); } } }}int dfs(int v,int t,int f)//dfs求最大流{ if(v==t) return f; for(int &i=iter[v];i<G[v].size();i++) { edge &e=G[v][i]; if(e.cap>0 && level[v]<level[e.to]) { int d=dfs(e.to,t,min(f,e.cap)); if(d>0) { e.cap-=d; G[e.to][e.rev].cap+=d; return d; } } } return 0;}int max_flow(int s,int t)//求s到t的最大流{ int flow=0; for(;;) { bfs(s); if(level[t]<0) return flow; memset(iter,0,sizeof(iter)); int f; while(f=dfs(s,t,inf)>0) flow+=f; }}
0 0
- dinic
- dinic
- Dinic
- Dinic
- dinic
- Dinic
- dinic
- Dinic
- dinic
- dinic
- Dinic
- dinic
- Dinic
- Dinic 算法
- poj3469 Dinic
- poj1637 Dinic
- Dinic 模板
- NetWord Dinic
- Prim算法
- 评分星星New Version
- Spinner常用方法
- QQ5.0 新版 侧滑菜单效果实现!
- 6.3.1 Strategic Game
- dinic
- javascript 鼠标单击和双击事件并存的实现方法
- 谈谈藤艺的消费误区
- SIP 协议在Asterisk中的应用
- sprintf与swprintf
- dmesg七种用法
- 实现网页方式的即时消息通信
- 'sheet1$' 不是一个有效名称。请确认它不包含无效的字符或标点,且名称不太长。
- DatabaseHelper