博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3469 Dual Core CPU——最小割
阅读量:4968 次
发布时间:2019-06-12

本文共 1542 字,大约阅读时间需要 5 分钟。

题目:

最小割裸题。

那个限制就是在 i、j 之间连双向边。

根据本题能引出网络流中二元关系的种种。

别忘了写 if ( x==n+1 ) return flow ; !

#include
#include
#include
#include
using namespace std;const int N=2e4+5,M=2e5+5,INF=0x3f3f3f3f;int n,m,hd[N],cr[N],xnt=1,mxflow,dfn[N];int num;struct Ed{ int nxt,to,cap; Ed(int n=0,int t=0,int c=0):nxt(n),to(t),cap(c) {}}ed[(N+M)<<2];void add(int x,int y,int z){ ed[++xnt]=Ed(hd[x],y,z);hd[x]=xnt; ed[++xnt]=Ed(hd[y],x,0);hd[y]=xnt;}bool bfs(){ memset(dfn,0,sizeof dfn); dfn[0]=1;queue
q;q.push(0); while(q.size()) { int k=q.front();q.pop(); for(int i=hd[k],v;i;i=ed[i].nxt) if(!dfn[v=ed[i].to]&&ed[i].cap) { dfn[v]=dfn[k]+1;q.push(v); if(v==n+1)return true; } } return false;}int dinic(int x,int flow){ if(x==n+1)return flow;//!!! int use=0; for(int &i=cr[x],v;i;i=ed[i].nxt) if(dfn[v=ed[i].to]==dfn[x]+1&&ed[i].cap) { int tmp=dinic(v,min(ed[i].cap,flow-use)); if(!tmp)dfn[v]=0; ed[i].cap-=tmp;ed[i^1].cap+=tmp;use+=tmp; if(use==flow)return flow; } return use;}int main(){ scanf("%d%d",&n,&m);int x,y,z; for(int i=1;i<=n;i++) { scanf("%d%d",&x,&y); add(0,i,x);add(i,n+1,y); } for(int i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); add(x,y,z);add(y,x,z); } while(bfs()) { memcpy(cr,hd,sizeof hd); int k=dinic(0,INF); mxflow+=k; } printf("%d",mxflow); return 0;}

 

转载于:https://www.cnblogs.com/Narh/p/9280949.html

你可能感兴趣的文章
DataTable和 DataRow的 区别与联系
查看>>
检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败
查看>>
mysql数据库中数据类型
查看>>
Fireworks基本使用
查看>>
Linux 标准 I/O 库
查看>>
.net Tuple特性
查看>>
Java基础常见英语词汇
查看>>
nginx启动、关闭命令、重启nginx报错open() "/var/run/nginx/nginx.pid" failed
查看>>
BZOJ 3097 Hash Killer I
查看>>
UINavigationController的视图层理关系
查看>>
html阴影效果怎么做,css 内阴影怎么做
查看>>
宏观经济
查看>>
综合练习:词频统计
查看>>
BZOJ1026: [SCOI2009]windy数
查看>>
样板操作数
查看>>
64位UBUNTU下安装adobe reader后无法启动
查看>>
组件:slot插槽
查看>>
Nginx配置文件nginx.conf中文详解(转)
查看>>
POJ 1308 Is It A Tree?(并查集)
查看>>
N进制到M进制的转换问题
查看>>