题目要判断最小生成树是不是是唯一的。
先用prim算法求出最小生成树。然后将加进最小生成树的边用used数组标记起来,并且记录下i-j点的最大权值。然后在枚举那些没加进生成树的边。看是否也能得到同样的权值。如果能说明不唯一
比如used[i][j]==0说明i-j这条边没加进去然后更新Min。
#include#include #include #include using namespace std;const int inf=0x3f3f3f3f;const int maxn=110;bool vis[maxn];int lowc[maxn];int cost[maxn][maxn];int pre[maxn];int Max[maxn][maxn];bool used[maxn][maxn];int n,m; int ans;int Prim(){ ans=0; memset(vis,false,sizeof(vis)); memset(Max,0,sizeof(Max)); memset(used,false,sizeof(used)); vis[0]=true; pre[0]=-1; for(int i=1;i lowc[j]) { min=lowc[j]; p=j; } } if(min==inf) return -1; ans+=min; vis[p]=true; used[p][pre[p]]=used[pre[p]][p]=true; for(int j=0;j cost[p][j]) { lowc[j]=cost[p][j]; pre[j]=p; } } } return ans;} int get_min(){ int Min=inf; for(int i=0;i