xmu 1100无向图最小割

原创 2012年03月27日 09:06:19
#include <iostream>
using namespace std;
int mat[110][110];
int res;

void Mincut(int n) {
	int node[110], dist[110];
	bool visit[110];
	int i, prev, maxj, j, k;
	for (i = 0; i < n; i++)
		node[i] = i;
	while (n > 1) {
		int maxj = 1;
		for (i = 1; i < n; i++) { //初始化到已圈集合的割大小
			dist[node[i]] = mat[node[0]][node[i]];
			if (dist[node[i]] > dist[node[maxj]])
				maxj = i;
		}
		prev = 0;
		memset(visit, false, sizeof (visit));
		visit[node[0]] = true;
		for (i = 1; i < n; i++) {
			if (i == n - 1) { //只剩最后一个没加入集合的点,更新最小割
				res = min(res, dist[node[maxj]]);
				for (k = 0; k < n; k++) //合并最后一个点以及推出它的集合中的点
					mat[node[k]][node[prev]] = (mat[node[prev]][node[k]] += mat[node[k]][node[maxj]]);
				node[maxj] = node[--n]; //缩点后的图
			}
			visit[node[maxj]] = true;
			prev = maxj;
			maxj = -1;
			for (j = 1; j < n; j++)
				if (!visit[node[j]]) { //将上次求的maxj加入集合,合并与它相邻的边到割集
					dist[node[j]] += mat[node[prev]][node[j]];
					if (maxj == -1 || dist[node[maxj]] < dist[node[j]])
						maxj = j;
				}
		}

	}
	return;
}

int main() {
	int n, m, a, b;
	while (scanf("%d%d", &n, &m) != EOF) {
		res = (1 << 29);
		memset(mat, 0, sizeof (mat));
		while (m--) {
			scanf("%d%d", &a, &b);
			mat[a][b] += 1;
			mat[b][a] += 1;
		}
		Mincut(n);
		printf("%d\n", res);
	}
}

相关文章推荐

poj 2914 无向图最小割

最小割集◎Stoer-Wagner算法 一个无向连通网络,去掉一个边集可以使其变成两个连通分量则这个边集就是割集;最小割集当然就权和最小的割集。 可以用最小切割最大流定理: 1.min=MA...
  • vsooda
  • vsooda
  • 2012年03月27日 09:11
  • 3009

BZOJ1001[BeiJing2006]狼抓兔子(无向图最小割)

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 这题的题意其实就是求一个最小割,但是由于是无向图,所以加边的时候,两边的流量都要是输入...
  • xtttgo
  • xtttgo
  • 2016年05月08日 12:41
  • 587

poj 2914 Minimum Cut 【无向图全局最小割 Stoer-wagner算法】

Minimum Cut Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 8379   Accepted: 351...

hdu6081 度度熊的王国战略(无向图全局最小割 stoer-wagner)

题意:求无向图全局最小割。点的数量有点大,使用优先队列优化(但貌似在稠密图中,还没有n^3快)。 #include #include #include #include #include #incl...

【Python排序搜索基本算法】之无向图的最小割&Karger算法(Graphs and Minimum Cuts & Karger's Min-Cut Algorithm)

Graphs      Two ingredients      1. vertices (nodes) v      2. edges(undirected or directed) Example...

POJ2914 Minimum Cut(无向图的最小割,Stoer_Wagner算法)

Stoer_Wagner算法解决无向图的最小割问题,其思想是:最小割可以把一张联通图分成两部分,对于图中任意两点,要么同时属于这两部分中的一部分,要么分别在这个两个集合中,我们枚举任意两点间的最小割,...

poj 1966 Cable TV Network 【枚举源汇 求解 无向图最小割】

Cable TV Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4269   Accepted:...

poj 2914 无向图最小割 Stoer-Wagner算法

题意: 最少删去多少条边使得图不再是单个双连通分量。 思路: 1.最小割思路,n 次网络流做法,TLE 2.Stoer-Wagner算法(模板),8000+ms,很有压力。 Stoer-Wagner算...

【HDU 5889】【最短路+最小割 裸题】Barricade 【n点m边无向图在最短路上设置障碍,使得不管怎么走都会碰到障碍】

传送门:HDU 5889 Barricade 描述: Barricade Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536...

POJ2914_Minimum Cut_无向图最小割::stoer_wagner算法

题意给出一个有边权的无向图,求最小割。思路如果按照网络流的做法,通过求最大流来求最小割。就需要确定一个源点然后枚举汇点,这样的复杂度极高,据说有O(n5)。所以这个题并不是这么做,而是用stoer_w...
  • yuege38
  • yuege38
  • 2017年06月07日 00:18
  • 111
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:xmu 1100无向图最小割
举报原因:
原因补充:

(最多只允许输入30个字)