最大流模板成为另一个被攻克的模板题。

  今天QDC给我讲了一下Dinic,感觉很好懂。于是为了巩固就把这道题A掉了。

  核心思想就是不断BFS分层,然后不断DFS找增广路。找不到之后就可以把答案累加输出了。

  

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype> inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} struct Edge{
int next,to,val;
}edge[];
int head[],num=-;
inline void add(int from,int to,int val){
edge[++num]=(Edge){ head[from],to,val};
head[from]=num;
} bool vis[];
int dfn[];
int f[],h,t=;
int n,m,Start,End; bool bfs(){
memset(vis,,sizeof(vis));
f[]=Start;vis[Start]=;dfn[Start]=;h=;t=;
while(h++<t){
int from=f[h];
for(int i=head[from];i!=-;i=edge[i].next){
int to=edge[i].to;
if(vis[to]||(!edge[i].val)) continue;
dfn[to]=dfn[from]+;
vis[to]=;
f[++t]=to;
}
}
return vis[End];
} int dfs(int x,int val){
if(x==End) return val;
vis[x]=;
for(int i=head[x];i!=-;i=edge[i].next){
int to=edge[i].to;
if(dfn[to]==dfn[x]+&&!vis[to]&&edge[i].val>){
int now=dfs(to,std::min(edge[i].val,val));
if(now>){
edge[i].val-=now;
edge[i^].val+=now;
return now;
}
}
}
} int ans; int main(){
memset(head,-,sizeof(head));
n=read(),m=read(),Start=read(),End=read();
for(int i=;i<=m;++i){
int from=read(),to=read(),val=read();
add(from,to,val);
add(to,from,);
}
while(bfs()){
memset(vis,,sizeof(vis));
int now=dfs(Start,0x7fffffff);
if(!now) break;
ans+=now;
}
printf("%d",ans);
return ;
}

  我知道这么一笔带过很不友好啊……所以Sniffestherose写的一篇不错的网络流讲解博客  为什么不去看看呢?

  友链出门右拐……

最新文章

  1. 将页面上的内容导出到Excel
  2. Dom初
  3. POJ 2195:Going Home(最小费用最大流)
  4. java ee 面试时的机试题
  5. GLSL的qualifier
  6. ArrayList,LinkedList,Vector,Stack之间的区别
  7. Galera 10.0.20 on CentOS 6.6
  8. No Dialect mapping for JDBC type: -1
  9. webdynpro 调用应用程序做跳转
  10. 【mac版】前端开发工具整理
  11. Struts2+Spring+Hibernate3整合
  12. Java编程:删除 List 元素的三种正确方法
  13. golang web sample
  14. 文件上传 - iframe上传
  15. 样式styles和主题theme
  16. 【bzoj3456】 城市规划
  17. gdb 调试coredump文件过程:
  18. java 编写小工具 尝试 学习(五)
  19. filter-policy和AS-PATH-FILTER过滤BGP路由条目
  20. 如何使用 Opencv dnn 模块调用 Caffe 预训练模型?

热门文章

  1. 盒子模型--IE与标准
  2. Fragment(一)--Fragment用法常见问题
  3. uvm_verision——告诉我你几岁了?
  4. vs2010调试sql2008存储过程
  5. LintCode 30插入区间
  6. VGG16学习笔记
  7. const、let、var的区别
  8. Vue的elementUI实现自定义主题
  9. python之道05
  10. jwt 登录