poj 1679 The Unique MST(次小生成树)
2014-09-01 22:10
429 查看
题目链接:http://poj.org/problem?id=1679
思路:找到次小生成树,与最小生成树进行比较,如果最小生成树与次小生成树相同,则最小生成树不唯一。
思路:找到次小生成树,与最小生成树进行比较,如果最小生成树与次小生成树相同,则最小生成树不唯一。
#include<cstdio> #include<cstring> using namespace std; const int num=105; int n,m,G[num][num],vis[num][num],path[num][num],pre[num]; //G记录路径、vis记录mst中用到的路径、path[i][j]表示在mst中从i到j的最大路径、pre记录前驱 int dis[num],p[num];//prim 中用到的dis记录和p标记 int max(int a,int b) { if(a>b) return a; return b; } int min(int a,int b) { if(a<b) return a; return b; } void init() { int i,j; for(i=0;i<=n;i++) { for(j=0;j<=n;j++) { G[i][j]=0x7fffffff; vis[i][j]=0; path[i][j]=0; } pre[i]=-1; p[i]=0; } } int prim() { int i,j,tp,min,fa,ans=0; p[1]=1; for(i=2;i<=n;i++) { dis[i]=G[1][i]; pre[i]=1; } for(i=1;i<n;i++) { min=0x7fffffff; for(j=1;j<=n;j++) { if(p[j]==0&&dis[j]<min) { min=dis[j]; tp=j; } } ans+=dis[tp]; vis[pre[tp]][tp]=vis[tp][pre[tp]]=1; p[tp]=1; for(j=1;j<=n;j++) { if(p[j]&&j!=tp) path[tp][j]=path[j][tp]=max(dis[tp],path[j][pre[tp]]);//更新两点间路径的最大一段的距离 if(p[j]==0&&G[tp][j]<dis[j]) { dis[j]=G[tp][j]; pre[j]=tp; } } } return ans; } int main() { int i,j,cas,a,b,c,mst,ans; //freopen("in.txt","r",stdin); scanf("%d",&cas); while(cas--) { scanf("%d%d",&n,&m); init(); for(i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); G[a][b]=G[b][a]=c; } mst=prim(); ans=0x7fffffff; for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(G[i][j]!=0x7fffffff&&vis[i][j]==0) ans=min(ans,mst-path[i][j]+G[i][j]); if(ans==mst) printf("Not Unique!\n"); else printf("%d\n",mst); } return 0; }
相关文章推荐
- POJ 1679 The Unique MST(次小生成树)
- poj 1679 The Unique MST (次小生成树)
- POJ 1679 The Unique MST(次小生成树)
- POJ 1679 The Unique MST (次小生成树)
- POJ 1679 The Unique MST(次小生成树)
- (kruscal12.3.4)POJ 1679 The Unique MST(判断最小生成树的唯一性||次小生成树)
- poj 1679 The Unique MST(次小生成树)
- poj 1679 The Unique MST (次小生成树)
- POJ 1679 -- The Unique MST(次小生成树)
- poj 1679 The Unique MST(次小生成树)
- POJ - 1679 The Unique MST (次小生成树)
- POJ 1679 The Unique MST(次小生成树)
- POJ 1679 The Unique MST (次小生成树)
- POJ 1679 The Unique MST 次小生成树Prim
- POJ1679_The Unique MST(次小生成树)
- POJ-1679 The Unique MST 次小生成树
- POJ 1679 The Unique MST (次小生成树)
- poj1679 The Unique MST(判定次小生成树)
- POJ 1679 The Unique MST(最小生成树--prime||次小生成树)
- POJ - 1679 The Unique MST(次小生成树)