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

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

基础算法: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;
}

POJ 2914 Minimum Cut 最小割算法题解的更多相关文章

  1. POJ 2914 Minimum Cut 最小割图论

    Description Given an undirected graph, in which two vertices can be connected by multiple edges, wha ...

  2. POJ 2914 Minimum Cut Stoer Wagner 算法 无向图最小割

    POJ 2914 题意:给定一个无向图 小于500节点,和边的权值,求最小的代价将图拆为两个联通分量. Stoer Wagner算法: (1)用类似prim算法的方法求"最大生成树" ...

  3. POJ2914 Minimum Cut —— 最小割

    题目链接:http://poj.org/problem?id=2914 Minimum Cut Time Limit: 10000MS   Memory Limit: 65536K Total Sub ...

  4. POJ 2914 Minimum Cut (全局最小割)

    [题目链接] http://poj.org/problem?id=2914 [题目大意] 求出一个最小边割集,使得图不连通 [题解] 利用stoerwagner算法直接求出全局最小割,即答案. [代码 ...

  5. POJ 2914 Minimum Cut【最小割 Stoer-Wangner】

    题意:求全局最小割 不能用网络流求最小割,枚举举汇点要O(n),最短增广路最大流算法求最大流是O(n2m)复杂度,在复杂网络中O(m)=O(n2),算法总复杂度就是O(n5):就算你用其他求最大流的算 ...

  6. POJ 2914 Minimum Cut 全局最小割

    裸的全局最小割了吧 有重边,用邻接矩阵的时候要小心 #include<iostream> #include<cstdio> #include<bitset> #in ...

  7. POJ 2914 - Minimum Cut - [stoer-wagner算法讲解/模板]

    首先是当年stoer和wagner两位大佬发表的关于这个算法的论文:A Simple Min-Cut Algorithm 直接上算法部分: 分割线 begin 在这整篇论文中,我们假设一个普通无向图G ...

  8. POJ 2914 Minimum Cut

    Minimum Cut Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 9319   Accepted: 3910 Case ...

  9. HDU 6214 Smallest Minimum Cut 最小割,权值编码

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6214 题意:求边数最小的割. 解法: 建边的时候每条边权 w = w * (E + 1) + 1; 这 ...

随机推荐

  1. 高性能计算机传奇(vamei)

    高性能计算机是用网络将多台计算机连接在一起.并构成一个统一的系统,从而拥有远超个人电脑的计算能力.这样利用网络,让计算机合作工作的并行系统又称为集群(cluster).server.分布式计算机.超级 ...

  2. Qt自定义类型使用QHash等算法(Qt已经自定义了34种类型,包括int, QString, QDate等基本数据类型)

    自定义类型 #include <QCoreApplication> #include <QSet> #include <QDebug> class testCust ...

  3. 11.使用 package.json

    转自:http://www.runoob.com/nodejs/nodejs-express-framework.html package.json 位于模块的目录下,用于定义包的属性.接下来让我们来 ...

  4. golang sync.RWMutex

    sync.RWMutex package main import ( "fmt" "runtime" "sync" ) func click ...

  5. CISP/CISA 每日一题 四

    CISA 每日一题(答) 连续在线审计技术: 1.系统控制审计检查文件和内嵌审计模型(SCARF/EAM):非常复杂,适用于正常处理不能被中断:通过在组织的主机应用系统中内嵌经特别编写的审计软件,使审 ...

  6. WPF 入门《数据绑定》

    简单而言, 数据绑定是一种关系, 这种关系告诉WPF 从一个源目标对象中提取一些信息, 并且使用该信息设置为目标对象的属性.目标属性总是依赖项属性, 并且通常位于WPF元素中. 然而, 源对象可以是任 ...

  7. RHEL6安装调试过程中遇到的问题集

    /*** **问题集 2014/6/9 20:55:52** **Autor: Weigong Xu ** ***/ 1. Linux中开启22port: 22port是ssh服务的.你仅仅要启动ss ...

  8. [D3] Creating a D3 Force Layout in React

    Learn how to leverage d3's layout module to create a Force Layout inside of React. We'll take a look ...

  9. JPA学习笔记(11)——使用二级缓存

    一级缓存 查询两次id为1的user User user1 = entityManager.find(User.class, 1); User user2 = entityManager.find(U ...

  10. μC/OS中的任务就绪表

    为了便于对就绪表的查找,μC/OSII又定义了一个数据类型为INT8U的变量OSRdyGrp, 并使该变量的每一位都对应OSRdyTbl[ ]的一个任务组(即数组的一个元素),如果某任务组中 有任务就 ...