模板-网络流-Dinic
2024-10-19 20:33:51
//Dinic
struct Edge{
int from,to,cap,flow;
Edge(){ }
Edge(int a,int b,int c,int d){
from=a;
to=b;
cap=c;
flow=d;
}
}edges[maxm*];
int n,m,s,t,sz;
vector<int> ve[maxn];
int dis[maxn],cur[maxn];
bool vis[maxn];
int l,r;
void addEdge(int a,int b,int c)
{
edges[sz++]=Edge(a,b,c,);
edges[sz++]=Edge(b,a,,);
ve[a].push_back(sz-);
ve[b].push_back(sz-);
}
bool BFS(){
memset(vis,,sizeof(vis));
queue<int> qu;
qu.push(s);
dis[s]=;
vis[s]=;
while(qu.size()){
int u=qu.front();qu.pop();
for(int i=;i<ve[u].size();i++){
Edge& e=edges[ve[u][i]];
if(!vis[e.to] && e.flow<e.cap){
vis[e.to]=;
qu.push(e.to);
dis[e.to]=dis[u]+;
}
}
}
return vis[t];
}
int DFS(int x,int a)
{
if(x==t || a==)return a;
int flow=,f;
for(int& i=cur[x];i<ve[x].size();i++){
Edge e=edges[ve[x][i]];
if(dis[x]+==dis[e.to] && (f=DFS(e.to,min(a,e.cap-e.flow)))>){
flow+=f;
a-=f;
edges[ve[x][i]].flow+=f;
edges[ve[x][i]^].flow-=f;
if(a==)break;
}
}
return flow;
}
int dinic()
{
int flow=;
while(BFS()){
memset(cur,,sizeof(cur));
flow += DFS(s,);
}
return flow;
}
最新文章
- Oracle数据泵(Data Dump)错误汇集
- 2016的ChinaJoy沦为ChinaVR?
- MiniUI中DataGrid数据的载入
- Sprint(第九天11.22)
- C语言 值传递和地址传递
- ArcMap 操作笔记
- extJs学习基础
- mysql导出导入
- MYSQL集群的搭建
- tabBaritem的图片偏移
- windows系统下Tomcat与Apache服务器集成
- Python背景色与语法高亮主题配置
- (译)如何在ASP.NET中安全使用ViewState
- JSON 之JAVA 解析
- C# ITextShap 生成PDF 下载
- Java主线程等待子线程、线程池
- 上mongodb创建一些吸取的经验教训指数
- token 入门教程
- JS中的算法与数据结构——排序(Sort)(转)
- pytorch_SRU(Simple Recurrent Unit)
热门文章
- mii-tool与ethtool的用法详解
- [洛谷P1401]城市
- MySQL之SELECT 语句详解
- BZOJ1452 [JSOI2009]Count 【树套树 (树状数组)】
- [codechef MEXDIV]Mex division
- WebKit学习资源
- jsp中的路径问题
- [POJ1082&;POJ2348&;POJ1067&;POJ2505&;POJ1960]简单博弈题总结
- [bzoj3884]上帝与集合的正确用法——欧拉函数
- webstorm es6 语法报错