The Unique MST-POJ1679(次小生成树)
2015-10-10 17:55
549 查看
http://poj.org/problem?id=1679
次小生成树
次小生成树
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<iostream> #include<algorithm> using namespace std; #define N 200 #define INF 0xfffffff int G ,vis ,dis ,n,m,pre ; int Max ,use ; void Inn() { int i,j; for(i=0;i<=N;i++) { dis[i]=0; for(j=0;j<=N;j++) { if(i==j) G[i][j]=0; else G[i][j]=INF; } } memset(vis,0,sizeof(vis)); memset(use,0,sizeof(use)); memset(Max,0,sizeof(Max)); memset(pre,0,sizeof(pre)); } int prime(int s) { int i,j,ans=0; for(i=1;i<=n;i++) { dis[i]=G[s][i]; pre[i]=s; } vis[s]=1; for(i=1;i<n;i++) { int Min=INF,dist=1; for(j=1;j<=n;j++) { if(!vis[j] && dis[j]<Min) { Min=dis[j]; dist=j; } } ans+=Min; vis[dist]=1; use[dist][pre[dist]]=use[pre[dist]][dist]=1; for(j=1;j<=n;j++) { if(vis[j] && j!=dist) Max[dist][j]=Max[j][dist]=max(Max[dist][j],dis[dist]); if(!vis[j] && dis[j]>G[dist][j]) { dis[j]=G[dist][j]; pre[j]=dist; } } } return ans; } int SMST(int a) { int minn=INF,i,j; for(i=1;i<=n;i++) { for(j=i+1;j<=n;j++) { if(!use[i][j] && G[i][j]!=INF) minn=min(minn,a-Max[i][j]+G[i][j]); } } return minn; } int main() { int T,i,a,b,c; scanf("%d",&T); while(T--) { Inn(); scanf("%d %d",&n,&m); for(i=0;i<m;i++) { scanf("%d %d %d",&a,&b,&c); G[a][b]=G[b][a]=c; } int n1=prime(1); int n2=SMST(n1); if(n1==n2) printf("Not Unique!\n"); else printf("%d\n",n1); } return 0; }
相关文章推荐
- UICollectionView
- UI设计参考
- UITextView 实现placeholder的方法
- UITextField
- js生成uuid的方法
- java基础学习GUI编程
- UIActionSheet
- UIAlertView带textField
- UIExtendedEdge
- UIMenuController/UIPasteboard(1) 制作一个可以粘贴复制的Label
- LEETCODE-Implement Stack using Queues
- NSStringUIImage~NSData的相互转换以及中文转码
- require
- UIImage
- UIViewCotroller 的生命周期函数
- UIScrollView解决touchesBegan等方法不能触发的解方案
- iOS UITextView限制字数
- UI继承图
- UIView 中常见的方法总结
- 采用Visual Stuidio 2010 创建网站栏