HDU 3691 全局最小割
2011-09-24 01:20
399 查看
#include <iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=319; int f[maxn][maxn]; int dis[maxn],v[maxn],vis[maxn]; int ls,le; int n,m,s; void Union() { for(int i=1;i<=n;i++) { f[v[ls]][v[i]]+=f[v[le]][v[i]]; f[v[i]][v[ls]]+=f[v[le]][v[i]]; } v[le]=v[n--]; } int mincut() { for(int i=1;i<=n;i++) { dis[v[i]]=f[v[1]][v[i]]; vis[v[i]]=0; } vis[v[1]]=1; for(int i=1;i<n-1;i++) { int k=-1; for(int j=1;j<=n;j++)if(!vis[v[j]]) { if(k==-1||dis[v[j]]>dis[v[k]]) k=j; } vis[v[ls=k]]=1; for(int j=1;j<=n;j++) dis[v[j]]+=f[v[k]][v[j]]; } for(int i=1;i<=n;i++) if(!vis[v[i]]) { le=i; // cout<<dis[v[i]]<<"#"<<endl; return dis[v[i]]; } } void solve() { int ans=1<<30; while(n>1) { // cout<<n<<endl; int tmp=mincut(); //cout<<tmp<<endl; // cout<<ls<<" "<<le<<endl; if(tmp<ans) ans=tmp; Union(); // for(int i=1;i<=n;i++) // cout<<i<<" "<<v[i]<<endl; } printf("%d\n",ans); } int main() { int a,b,c; while(scanf("%d%d%d",&n,&m,&s),n+m+s) { for(int i=1;i<=n;i++) v[i]=i; memset(f,0,sizeof(f)); for(int i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); f[a][b]+=c; f[b][a]+=c; } solve(); } return 0; }
相关文章推荐
- HDU 3691 Nubulsa Expo (全局最小割)
- HDU 3691 Nubulsa Expo(全局最小割)
- HDU-3691-全局最小割变形
- HDU 3691 Nubulsa Expo(全局最小割)(10福州B题)#by zh
- HDU 3691 Nubulsa Expo(全局最小割Stoer_Wagn)
- HDU 3691 Nubulsa Expo(全局最小割Stoer-Wagner算法)
- HDU - 3691 Nubulsa Expo sw算法求全局最小割
- Hdu 6081 度度熊的王国战略 无向图全局最小割
- HDU 3691 Nubulsa Expo(SW算法求最小割)
- hdu 3002 King of Destruction(全局最小割,StoerWagner算法)
- HDU 3002 King of Destruction(全局(无向图)最小割(SW))
- HDU 6081 度度熊的王国战略(全局最小割Stoer-Wagner算法)
- Hdu 3691 Nubulsa Expo(无向图最小割)
- Stoer-Wagner无向图全局最小割(hduoj 3691 Nubulsa Expo)
- 【HDU】3870 Catch the Theves 对偶图全局最小割 最短路
- hdu 3002 全局最小割模板题
- POJ 3691 Nubulsa Expo 全局最小割
- hdu1281棋盘游戏(二分匹配,最小顶点覆盖)
- HDU 4424 Conquer a New Region (最小生成树+贪心)
- HDU-1875 最小生成树 PRIM