网络流dinic板子
2024-08-31 03:06:03
bool bfs(){
memset(deep,0,sizeof(deep));
queue<int>que;
que.push(s);
deep[s]=1;
while(!que.empty()){
int u=que.front();
que.pop();
for(int i=head[u];i!=-1;i=e[i].nextt){
int v=e[i].v;
if(e[i].w>0&&deep[v]==0){
deep[v]=deep[u]+1;
if(v==t)
return true;
que.push(v);
}
}
}
return deep[t]==0?false:true;
}
int dfs(int u,int fl){
if(u==t)
return fl;
int ans=0,x=0;
for(int i=cur[u];i!=-1;i=e[i].nextt){
int v=e[i].v;
if(e[i].w>0&&deep[v]==deep[u]+1){
x=dfs(v,min(e[i].w,fl-ans));
e[i].w-=x;
e[i^1].w+=x;
if(e[i].w)
cur[u]=i;
ans+=x;
if(ans==fl)
return ans;
}
}
if(ans==0)
deep[u]=0;
return ans;
}
int dinic(int n){
int ans=0;
while(bfs()){
for(int i=0;i<=n;i++)
cur[i]=head[i];
ans+=dfs(s,inf);
}
return ans;
}
最新文章
- oracle 学习笔记(四)
- C#语言数据总结
- 对称加密之AES、压缩解压以及压缩加密解密解压综合实战
- ArrayList 和 LinkedList 的区别
- lucene索引文件大小优化小结
- [算法导论]迪克斯特拉算法 @ Python
- mysqli连接数据库常见函数
- Linq lamda表达式Single和First方法
- mercurial(hg)使用
- C++基础知识梳理--C++的6个默认函数
- Linux下安装Oracle11g服务器(转)
- mysql 正则表达式问号
- mysql 监控工具(windows版本)
- Scratch 简单的小游戏 --- 碰碰球
- hexo d 部署博客时出错
- [vue]通过watch实现数据双向绑定
- CF989C A Mist of Florescence (构造)
- iOS下拉刷新和上拉刷新
- USB PIC Programmer (Brenner8)
- OC基础--常用类的初步介绍与简单使用之NSDate