前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【POJ 1679】The Unique MST(次小生成树)

【POJ 1679】The Unique MST(次小生成树)

作者头像
饶文津
发布2020-06-02 15:49:24
2290
发布2020-06-02 15:49:24
举报

找出最小生成树,同时用Max[i][j]记录i到j的唯一路径上最大边权。然后用不在最小生成树里的边i-j来替换,看看是否差值为0。

#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=101;
const int INF=0x3f3f3f3f;
int n,m,ans,s;
int lowc[N],vis[N],g[N][N];
int Max[N][N],fa[N],used[N][N];
int Prim(){
    int ans=0;
    memset(Max,0,sizeof Max);
    memset(used,0,sizeof used);
    memset(vis,0,sizeof vis);
    vis[0]=1;
    for(int i=1;i<n;i++){
        lowc[i]=g[0][i];fa[i]=0;
    }
    for(int i=1;i<n;i++){
        int p=0;
        while(vis[p])p++;
        for(int j=p+1;j<n;j++)
            if(!vis[j] && lowc[j]<lowc[p])
                p=j;
        if(lowc[p]==INF)return -1;//原图不连通
        ans+=lowc[p];
        vis[p]=1;
        used[p][fa[p]]=used[fa[p]][p]=1;
        for(int j=0;j<n;j++)
            if(vis[j])
                Max[j][p]=Max[p][j]=max(Max[j][fa[p]],lowc[p]);                    else if(g[p][j]<lowc[j]){
                lowc[j]=g[p][j];
                fa[j]=p;
            }
    }
    return ans;
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        memset(g,INF,sizeof g);
        scanf("%d%d",&n,&m);
        while(m--){
            int u,v,w;
            scanf("%d%d%d",&u,&v,&w);
            u--;v--;
            g[u][v]=g[v][u]=w;
        }
        ans=Prim();
        s=INF;
        for(int i=0;i<n;i++)
            for(int j=i+1;j<n;j++)
                if(g[i][j]!=INF&&!used[i][j])
                    s=min(s,g[i][j]-Max[i][j]);
        
        if(ans==-1||s==0)
            puts("Not Unique!");
        else
            printf("%d\n",ans);
    }
    return 0;
}

  wa了好几发,原因是,s初始化为ans,而如果ans本身就是0的话,应该是唯一的最小生成树。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-08-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档