hdu6214Smallest Minimum Cut(最小割的最小割边数,dinic模板)
来源:互联网 发布:网络教育学位 编辑:程序博客网 时间:2024/05/21 22:53
题意:
给你一个有向图,求最小割的最小割边数。
思路:
上网搜到两种方法,其中一种是错的,因为最小割的割边一定为满流,但满流的边不一定是最小割的割边。
还有,用ford-fulkerson算法会超时,,所以得用更快的dinic算法
代码:
#include <bits/stdc++.h>using namespace std;const int maxn = 210;const int inf = 0x3f3f3f3f;struct edge{ int to,cap,rev;};vector<edge> g[maxn];int n,m,level[maxn];void add(int from,int to,int cap){ g[from].push_back((edge){to,cap,g[to].size()}); g[to].push_back((edge){from,0,g[from].size()-1});}int bfs(int s,int t){ memset(level,-1,sizeof(level)); queue<int> q; q.push(s); level[s] = 0; while(!q.empty()) { int u = q.front(); q.pop(); if(u==t) return 1; for(int i = 0;i<g[u].size();i++) { edge &e = g[u][i]; if(level[e.to]<0&&e.cap>0) { level[e.to] = level[u]+1; q.push(e.to); } } } return 0;}int dfs(int u,int t,int f){ if(u==t) return f; for(int i = 0;i<g[u].size();i++) { edge &e = g[u][i]; if(e.cap>0&&level[u]+1==level[e.to]) { int d = dfs(e.to,t,min(e.cap,f)); if(d>0) { e.cap -= d; g[e.to][e.rev].cap += d; return d; } } } return 0;}int dinic(int s,int t){ int ans = 0; while(bfs(s,t)) { ans += dfs(s,t,inf); } return ans;}int main(){ int t; cin>>t; while(t--) { scanf("%d%d",&n,&m); for(int i = 1;i<=n;i++) g[i].clear(); int s,t; scanf("%d%d",&s,&t); for(int i = 0;i<m;i++) { int u,v,val; scanf("%d%d%d",&u,&v,&val); add(u,v,val*(m+1)+1); } printf("%d\n",dinic(s,t)%(m+1)); } return 0;}
阅读全文
1 0
- hdu6214Smallest Minimum Cut(最小割的最小割边数,dinic模板)
- POJ2914 Minimum Cut(最小割模板题)
- Hdu 6214 Smallest Minimum Cut【Dinic-最大流最小割】
- HDU 6214 Smallest Minimum Cut(最小割的最少割边数)
- hdu6214-最小割边数&最大流最小割-Smallest Minimum Cut
- POJ 2914 Minimum Cut (最小割模板题)
- POJ2914 Minimum Cut 【全局最小割Stoer-Wagner模板题】
- poj 2914 Minimum Cut 求无向图的最小割 Stoer-Wagner算法模板
- 【POJ2914】Minimum Cut-无向图的全局最小割
- hdu Smallest Minimum Cut 边数最少的最小割
- POJ 2914 Minimum Cut 全局最小割
- POJ 2914 Minimum Cut 最小割
- POJ2914 Minimum Cut 最小割集
- 【最小割】POJ-2914 Minimum Cut
- poj 2914 Minimum Cut(全局最小割)
- POJ 2914 Minimum Cut 全局最小割
- POJ 2914 Minimum Cut 全局最小割
- POJ2914 Minimum Cut(最小割)
- MapReduce --全排序
- 特殊票券
- Vijos1450[包裹快递] 二分答案
- java输入流输出流详解
- 283. Move Zeroes
- hdu6214Smallest Minimum Cut(最小割的最小割边数,dinic模板)
- Unity_FPS游戏中设置子弹轨迹和红外线瞄准
- 邻接表的最小生成树
- 卸载jdk1.7,并且重新安装1.8,eclipse打不开
- Android——蓝牙(Bluetooth)
- oj 格式化时间
- 十个程序员必备的网站
- 一致性哈希算法学习及JAVA代码实现分析
- 使用Spark和Zeppelin探索movie-lens数据