最标准的最小割算法应用题目。

核心思想就是缩边:先缩小最大的边。然后缩小次大的边。依此缩小

基础算法:Prime最小生成树算法

只是本题測试的数据好像怪怪的,相同的算法时间执行会区别非常大,并且一样的代码替换。竟然会WA。系统出错的几率非常小。难倒測试系统本题会有错误?

懒得继续測试这道题的系统了,反正算法正确。AC。

#include <stdio.h>
#include <string.h>
#include <limits.h> const int MAX_N = 500;
int N, M, A, B, C, S, T;
int gra[MAX_N][MAX_N], dis[MAX_N];
bool vis[MAX_N], delVer[MAX_N]; inline int min(int a, int b) { return a < b ? a : b; } int search(int V) //V为计算剩下多少顶点了
{
memset(vis, 0, sizeof(vis));
memset(dis, 0, sizeof(dis));
int curMax = 0, cur = 0;
S = 0, T = 0;
for (int i = 1; i < V; i++)
{
curMax = 0;
for (int j = 1; j < N; j++)
{
if (!vis[j] && !delVer[j]) dis[j] += gra[cur][j];
} for (int j = 1; j < N; j++)
{
if (!vis[j] && !delVer[j] && dis[j] > curMax)
{
curMax = dis[j];
cur = j;
}
}
vis[cur] = true;
if (T == cur) return 0; //图不相连。提前结束循环,割点为0
S = T; T = cur; //目的得到最后和倒数第二节点。以便进行缩图
}
return curMax;
} //核心思想:先缩小最大的边,然后缩小次大的边,依此缩小
int Stoer_Wagner()
{
memset(delVer, 0, sizeof(delVer));
int minCut = INT_MAX;
for (int v = N; v > 1; v--) //共N-1条边, 当前v个点
{
minCut = min(minCut, search(v));
if (minCut == 0) return 0; //一点优化,提前结束
delVer[T] = true;
for (int i = 0; i < N; i++)
if (!delVer[i]) gra[S][i] = gra[i][S] += gra[T][i];
}
return minCut == INT_MAX ? 0 : minCut;//仅仅有一个顶点的时候返回0
} int main()
{
while (~scanf("%d %d", &N, &M))
{
memset(gra, 0, sizeof(gra));
for (int i = 0; i < M; i++)
{
scanf("%d %d %d", &A, &B, &C);
gra[B][A] = gra[A][B] += C;
}
printf("%d\n", Stoer_Wagner());
}
return 0;
}

最新文章

  1. JavaSE基础第一篇
  2. HTML5移动Web开发(八)——避免文本字体大小重置
  3. Code[VS] 1332 题解 【Kosaraju】【Tarjan】
  4. 转:LoadRunner负载测试之Windows常见性能计数器,分析服务器性能瓶颈
  5. 函数buf_page_get
  6. Java基础知识强化13:Java中单例模式案例使用(懒汉式)
  7. 2013 Changsha Regional 一样的木板一样的气球
  8. 集合如何判断null
  9. C语言头文件
  10. Webpack 2 视频教程 006 - 使用快捷方式进行编译
  11. 最新数组方法(包括es6)
  12. JS实现刷新页面后回到记录时滚动条的位置
  13. Netty源码学习笔记
  14. Appium——处理混合APP中H5的操作
  15. Swift中的Any 与 AnyObject、AnyClass的区别?
  16. Oracle故障排查之oracle解决锁表问题
  17. Android点击事件
  18. 【LG3245】[HNOI2016]大数
  19. UIScrollView原理
  20. Knockout.js Style绑定

热门文章

  1. 跟着辛星用PHP的反射机制来实现插件
  2. spinner -样式实现
  3. RelativeLayout-属性大全
  4. Android学习笔记进阶九之Matrix对称变换
  5. 3. CONFIGURATION官网剖析(博主推荐)
  6. go语言函数作为参数传递
  7. 原生JavaScript 封装ajax
  8. Python操作MySQL数据库完成简易的增删改查功能
  9. UML学习之初步总结
  10. python登录验证程序