tjut 1532
来源:互联网 发布:网贷之家数据分析 编辑:程序博客网 时间:2024/05/21 05:59
<span style="font-size:18px;">#include<iostream> using namespace std; #include<cstdio> #include<queue> #define INF 0x7fffffff #define min(a,b) a<b?a:b int N,M; int level[205]; int Si,Ei,Ci; struct Dinic { int c; int f; }edge[205][205]; bool dinic_bfs()//构造层次网络 { queue<int> Q; memset(level,0,sizeof(level));//初始化顶点的层次 为0 Q.push(1); level[1]=1; int u,v; while(!Q.empty()) { u=Q.front(); Q.pop(); for(v=1;v<=M;v++) { if(!level[v]&&edge[u][v].c>edge[u][v].f)//即顶点未被访问过,顶点u,v,存在边 { level[v]=level[u]+1;//给顶点标记层次 Q.push(v); } } } return level[M]!=0;//若返回false表明 汇点不在层次网络中 } int dinic_dfs(int u,int cp)//进行增广 { int tmp=cp; int v,t; if(u==M) return cp; for(v=1;v<=M&&tmp;v++) { if(level[u]+1==level[v]) { if(edge[u][v].c>edge[u][v].f) { t=dinic_dfs(v,min(tmp,edge[u][v].c-edge[u][v].f)); edge[u][v].f+=t; edge[v][u].f-=t; tmp-=t; } } } return cp-tmp; } int dinic()//求出最大流 { int sum,tf; sum=tf=0; while(dinic_bfs()) { while(tf=dinic_dfs(1,INF)) { sum+=tf; } } return sum; } int main() { while(~scanf("%d%d",&N,&M)) { memset(edge,0,sizeof(edge)); while(N--) { scanf("%d%d%d",&Si,&Ei,&Ci); edge[Si][Ei].c+=Ci;//防止重边 } int S=dinic(); printf("%d\n",S); } return 0; }
0 0
- tjut 1532
- tjut 5289
- tjut 5288
- tjut 5294
- tjut 2586
- tjut 5296
- tjut 5297
- tjut 5299
- tjut 5384
- tjut 5387
- tjut 5386
- tjut 5381
- tjut 5400
- tjut 5399
- tjut 5396
- tjut 5398
- tjut 5412
- tjut 5410
- 二维数组作函数参数
- 轻松管理安卓应用中的log打印信息
- Qt: 找不到Qt5Widgets.lib
- (剑指offer)替换空格
- python 中文乱码
- tjut 1532
- L质量管理
- WEB前端H5介绍-HTML基础认识
- MyCAT简易入门
- Window下git链接github ssh配置
- 把数组排成最小的数
- Oracle基础小结
- 算法竞赛入门第七章:迭代加深搜索
- M人力资源管理