poj 1679 Prim判断次短路
来源:互联网 发布:形容网络发达的句子 编辑:程序博客网 时间:2024/06/08 14:08
题意:判断最短路是否唯一。
思路:先prrim一次求出最短路同时记录最短路加入的边;
然后枚举所求边,将其删除再求n-1次prim,判断再次所求得的最短路与第一次求得的次短路的关系。
代码:
#include<iostream>#include<cstring>#include<cstdio>#define MAXN 5050#define inf 100000000using namespace std;struct Edge{ int u,v,w;}edge[MAXN];int n,m,mst;int map[MAXN][MAXN],dis[MAXN],fit[MAXN];bool unique;void prim(){ int i,j,now,minn,mine; int num;int k=0; unique=true; for( i=0;i<=n;i++) { dis[i]=inf; } mst=0; now=1; for( i=1;i<n;i++) { dis[now]=-1; mine=inf; for( j=1;j<=n;j++) { if(j!=now&&dis[j]>=0) { if(map[now][j]<dis[j]) { dis[j]=map[now][j]; fit[j]=now; } if(dis[j]<mine) { mine=dis[j]; minn=j; } } } if(mine==inf) { mst=0; return ; } edge[k].u=minn; edge[k].v=fit[minn]; edge[k].w=map[minn][fit[minn]]; k++; now=minn; mst+=mine; } num=k; for(k=0;k<num;k++) { map[edge[k].u][edge[k].v]=inf; map[edge[k].v][edge[k].u]=inf; if(i!=0) { map[edge[k-1].u][edge[k-1].v] = edge[k-1].w; map[edge[k-1].v][edge[k-1].u] = edge[k-1].w; } for(i = 1; i <= n; i ++) dis[i] = inf; int mst2=0; bool flag=true; now=1; for(i=1;i<n;i++) { dis[now]=-1; mine=inf; for(j=1;j<=n;j++) { if(j!=now&&dis[j]>=0) { if(map[now][j]<dis[j]) { dis[j]=map[now][j]; } if(dis[j]<mine) { mine=dis[j]; minn=j; } } } if(mine==inf) { flag=false; break; } now=minn; mst2+=mine; } if(flag&&mst2==mst) { unique=false; return ; } }}int main(){ int T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { map[i][j]=inf; } } for(int i=0;i<m;i++) { int v,w,c; scanf("%d%d%d",&v,&w,&c); map[v][w]=c; map[w][v]=c; } prim(); if(!unique)printf("Not Unique!\n"); else printf("%d\n",mst); } return 0;}
- poj 1679 Prim判断次短路
- POJ 3225 次短路
- poj 3255(次短路)
- poj 3255(次短路)
- 次短路poj 3255
- poj 次短路 dijkstra
- POJ-3255次短路
- POJ Roadblocks 次短路
- POJ 3255【次短路】
- POJ 3255 (次短路)
- POJ 1679 The Unique MST 次小生成树Prim
- POJ 3255 Roadblocks(次短路)
- POJ 3255 Roadblocks 次短路
- POJ 3255 Roadblocks 次短路
- POJ-3255-次短路问题
- POJ 3255 Roadblocks 次短路
- poj 3255 Roadblocks【次短路】
- POJ 3255 (次短路)
- 杭电1159-Common Subsequence
- C#学习笔记02:程序结构
- kinetis晶体谐振器到底要不要加电容和电阻
- ::Coinitialize and ::CoUninitialize
- shell笔记(三)——其他循环结构
- poj 1679 Prim判断次短路
- vs2010添加TSTCON( ActiveX Control Test Container )工具
- MOS管构成的简易双向电平转换电路
- Eclipse的JNI环境搭建
- 嵌入式系统如何安装内核模块
- oracle日记
- POJ2960 寻找SG值
- 74HC/LS/HCT/F系列芯片的区别
- UNIX/Linux发展历史