博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVALive 5099 Nubulsa Expo 全球最小割 非网络流量 n^3
阅读量:5927 次
发布时间:2019-06-19

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

主题链接:

意甲冠军:

给定n个点m条无向边 源点S

以下m行给出无向边以及边的容量。

问:

找一个汇点,使得图的最大流最小。

输出最小的流量。

思路:

最大流=最小割。

所以题意就是找全局最小割。

和源点无关。由于不关心源点在哪个点集里。

模版题: O(n^3)

#include 
#include
#include
#include
using namespace std;typedef long long ll;const int N = 305;const ll maxw = 1000007;const ll inf = 1e17;ll g[N][N], w[N];int a[N], v[N], na[N];ll mincut(int n) { int i, j, pv, zj; ll best = inf; for(i = 0; i < n; i ++) v[i] = i; while(n > 1) { for(a[v[0]] = 1, i = 1; i < n; i ++) { a[v[i]] = 0; na[i-1] = i; w[i] = g[v[0]][v[i]]; } for(pv = v[0], i = 1; i < n; i ++) { for(zj = -1, j = 1; j < n; j ++) if(!a[v[j]] && (zj < 0 || w[j] > w[zj])) zj = j; a[v[zj]] = 1; if(i == n-1) { if(best > w[zj]) best = w[zj]; for(i = 0; i < n; i ++) { g[v[i]][pv] = g[pv][v[i]] += g[v[zj]][v[i]]; } v[zj] = v[--n]; break; } pv = v[zj]; for(j = 1; j < n; j ++) if(!a[v[j]]) w[j] += g[v[zj]][v[j]]; } } return best;}int main() { int n, m, K, u, v ,w; while(~scanf("%d%d%d", &n, &m, &K)) { if(n == 0) break; for(int i = 0; i < n; i ++) { for(int j = 0; j < n; j ++) { g[i][j] = g[j][i] = 0; } } for(int i = 0; i < m; i ++) { scanf("%d%d%d", &u, &v, &w); u--; v --; g[u][v] += w; g[v][u] += w; } printf("%lld\n", mincut(n)); } return 0;}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

你可能感兴趣的文章
oop1
查看>>
避免活跃性危险(第十章)
查看>>
快来加入阿里云大学【云学院】班级助理招募—机会稍纵即逝,错过遥遥无期!...
查看>>
基于spring boot 的ssm项目的简单配置
查看>>
一个不成功人士的“成功之道”
查看>>
对大数据知识架构的梳理
查看>>
HTTPS实现原理
查看>>
MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题
查看>>
SCVMM 2012 R2运维管理九之:添加非信任的Hyper-v主机和群集
查看>>
源码lnmp
查看>>
Tomcat详解
查看>>
java总结
查看>>
关于异或的一些东西和应用
查看>>
二叉树的实现(C#)
查看>>
PrincetonAlgorithm I - Assignment2 Deques and Randomized Queues
查看>>
系统日子打印记录
查看>>
【矩阵乘法】OpenJ_POJ - C17F - A Simple Math Problem
查看>>
RvmTranslator7.0-OBJ
查看>>
[旧博客]Python 第一次
查看>>
Verify the Developer App certificate for your account is trusted on your device.
查看>>