POJ 2914 Minimum Cut (stoer_wagner算法)
2012-08-18 10:56
302 查看
题意:求最小割集
参考别人的。http://blog.csdn.net/vsooda/article/details/7397449 这里有stoer_wagner算法的说明。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
const int N = 509;
const int INF = 0x3f3f3f3f;
int n,m;
int map
;
bool combine
;
bool visit
;
int dis
;
void oor(int f,int t)
{
for(int i=0;i<n;i++)
if(!combine[i])
{
map[f][i]+=map[t][i];
map[i][f]+=map[i][t];
}
}
int sear()
{
memset(visit,false,sizeof(visit));
memset(dis,0,sizeof(dis));
int maxdis,maxone,ans,f,t;
while(1)
{
maxdis =-INF;
for(int i=0;i<n;i++)
if(!combine[i]&&!visit[i]&&maxdis<dis[i])
{
maxdis = dis[i];maxone = i;
}
if(maxdis==-INF)
{
combine[t] = 1;
oor(f,t);
return ans;
}
visit[maxone] = true;
f = t; t = maxone;
ans = maxdis;
for(int i=0;i<n;i++)
if(!combine[i]&&!visit[i])
dis[i]+=map[maxone][i];
}
}
void solve()
{
int ans = INF;
memset(combine,false,sizeof(combine));
for(int i=1;i<n;i++)
{
ans = min(ans,sear());
}printf("%d\n",ans);
}
int main()
{
freopen("in.txt","r",stdin);
while(~scanf("%d%d",&n,&m))
{
memset(map,0,sizeof(map));
int f,t,a;
while(m--)
{
scanf("%d%d%d",&f,&t,&a);
map[f][t]+=a;
map[t][f]+=a;
}
solve();
}
return 0;
}
参考别人的。http://blog.csdn.net/vsooda/article/details/7397449 这里有stoer_wagner算法的说明。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
const int N = 509;
const int INF = 0x3f3f3f3f;
int n,m;
int map
;
bool combine
;
bool visit
;
int dis
;
void oor(int f,int t)
{
for(int i=0;i<n;i++)
if(!combine[i])
{
map[f][i]+=map[t][i];
map[i][f]+=map[i][t];
}
}
int sear()
{
memset(visit,false,sizeof(visit));
memset(dis,0,sizeof(dis));
int maxdis,maxone,ans,f,t;
while(1)
{
maxdis =-INF;
for(int i=0;i<n;i++)
if(!combine[i]&&!visit[i]&&maxdis<dis[i])
{
maxdis = dis[i];maxone = i;
}
if(maxdis==-INF)
{
combine[t] = 1;
oor(f,t);
return ans;
}
visit[maxone] = true;
f = t; t = maxone;
ans = maxdis;
for(int i=0;i<n;i++)
if(!combine[i]&&!visit[i])
dis[i]+=map[maxone][i];
}
}
void solve()
{
int ans = INF;
memset(combine,false,sizeof(combine));
for(int i=1;i<n;i++)
{
ans = min(ans,sear());
}printf("%d\n",ans);
}
int main()
{
freopen("in.txt","r",stdin);
while(~scanf("%d%d",&n,&m))
{
memset(map,0,sizeof(map));
int f,t,a;
while(m--)
{
scanf("%d%d%d",&f,&t,&a);
map[f][t]+=a;
map[t][f]+=a;
}
solve();
}
return 0;
}
相关文章推荐
- poj 2914 Minimum Cut 求无向图最小割集 Stoer-Wagner算法
- poj 2914 Minimum Cut(无向图最小割 Stoer-Wagner算法)
- POJ 2914 Minimum Cut Stoer-Wagner(全局最小割)
- 无向带权图最小割stoer-wagner算法(poj 2914 Minimum cut)
- POJ 2914 Minimum Cut【最小割 Stoer-Wangner】
- poj 2914 无向图最小割 Stoer-Wagner算法
- POJ 2914 Minimum Cut(求全图的最小割Stoer-Wagner)
- poj 2914 全局最小割(stoer_wagner算法)
- poj 2914 Minimum Cut 求无向图的最小割 Stoer-Wagner算法模板
- POJ 2914-Minimum Cut(Stoer_Wagner最小割算法)
- POJ 2914 Minimum Cut【无向图最小割边集stoer-Wagner】
- poj 2914 Minimum Cut 【无向图全局最小割 Stoer-wagner算法】
- poj 2914(无向图最小割Stoer-Wagner算法)
- Poj 2914 Minimum Cut
- POJ 2914 Minimum Cut 全局最小割
- POJ 2914 Minimum Cut 最小割图论
- poj2914-Minimum Cut-Stoer-Wagner算法
- POJ 2914 Minimum Cut 最小割算法题解
- poj 2914 最小割 Stoer-Wagner 算法
- POJ-2914 Minimum Cut 无源无汇又向图中的最小割