http://www.cnblogs.com/kuangbin/p/3147329.html

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=110;
const int INF=0x3f3f3f3f;
bool vis[N];
int lowc[N],pre[N],Max[N][N];
bool used[N][N];
int Prim(int cost[][N],int n){
     int ans=0;
     memset(vis,0,sizeof(vis));
     memset(Max,0,sizeof(Max));
     memset(used,0,sizeof(used));
     vis[0]=1;
     pre[0]=-1;
     for(int i=1;i<n;++i) {
        lowc[i]=cost[0][i];
        pre[i]=0;
     }
     lowc[0]=0;
     for(int i=1;i<n;++i){
        int minc=INF;
        int p=-1;
        for(int j=0;j<n;++j) if(!vis[j]&&minc>lowc[j]) {
            minc=lowc[j];
            p=j;
        }
        if(minc==INF) return -1;
        ans+=minc;
        vis[p]=1;
        used[p][pre[p]]=used[pre[p]][p]=1;
        for(int j=0;j<n;++j){
            if(vis[j]) Max[j][p]=max(Max[j][pre[p]],lowc[p]);
            if(!vis[j]&&lowc[j]>cost[p][j]) {
                lowc[j]=cost[p][j];
                pre[j]=p;
            }
        }
     }
     return ans;
}
int ans;
int smst(int cost[][N],int n){
    int minn=INF;
    for(int i=0;i<n;++i)
        for(int j=i+1;j<n;++j)
        if(cost[i][j]!=INF&&!used[i][j])
        minn=min(minn,ans+cost[i][j]-Max[i][j]);
    if(minn==INF) return -1;
    return minn;
}
int cost[N][N];
int main(){
    int T,n,m;
    for(scanf("%d",&T);T--;){
        scanf("%d%d",&n,&m);
        int u,v,w;
        for(int i=0;i<n;++i)
            for(int j=0;j<n;++j)
            if(i==j) cost[i][j]=0;
        else cost[i][j]=INF;
        while(m--){
        scanf("%d%d%d",&u,&v,&w);
        --u;--v;
        cost[u][v]=cost[v][u]=w;
        }
        ans=Prim(cost,n);
        if(ans==-1) {
            puts("Not Unique");
            continue;
        }
        if(ans==smst(cost,n)) puts("Not Unique");
        else printf("%d\n",ans);
    }
}

poj1679最小生成树是否唯一的更多相关文章

  1. POJ-1679 The Unique MST---判断最小生成树是否唯一

    题目链接: https://vjudge.net/problem/POJ-1679 题目大意: 给定一个无向连通网,判断最小生成树是否唯一. 思路: (1)对图中的每条边,扫描其他边,如果存在相同权值 ...

  2. poj1679(判断最小生成树是否唯一)

    题意:给出n个点,m条边,要你判断最小生成树是否唯一. 思路:先做一次最小生成树操作,标记选择了的边,然后枚举已经被标记了的边,判断剩下的边组成的最小生成树是否与前面的相等,相等,则不唯一,否则唯一. ...

  3. POJ-1679 The Unique MST(次小生成树、判断最小生成树是否唯一)

    http://poj.org/problem?id=1679 Description Given a connected undirected graph, tell if its minimum s ...

  4. POJ 1679 The Unique MST 【判断最小生成树是否唯一】

    Description Given a connected undirected graph, tell if its minimum spanning tree is unique.  Defini ...

  5. POJ 1679 The Unique MST(判断最小生成树是否唯一)

    题目链接: http://poj.org/problem?id=1679 Description Given a connected undirected graph, tell if its min ...

  6. POJ 1679 The Unique MST (次小生成树 判断最小生成树是否唯一)

    题目链接 Description Given a connected undirected graph, tell if its minimum spanning tree is unique. De ...

  7. poj 1679 The Unique MST (判定最小生成树是否唯一)

    题目链接:http://poj.org/problem?id=1679 The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total S ...

  8. poj 1679 The Unique MST 判断最小生成树是否唯一(图论)

    借用的是Kruskal的并查集,算法中的一点添加和改动. 通过判定其中有多少条可选的边,然后跟最小生成树所需边做比较,可选的边多于所选边,那么肯定方案不唯一. 如果不知道这个最小生成树的算法,还是先去 ...

  9. 最小生成树(次小生成树)(最小生成树不唯一) 模板:Kruskal算法和 Prim算法

    Kruskal模板:按照边权排序,开始从最小边生成树 #include<algorithm> #include<stdio.h> #include<string.h> ...

随机推荐

  1. 部署企业LNMP架构搭建bbs

    部署企业LNMP架构 1===============部署Nginx 2===============安装及部署Mysql数据库 3===============安装PHP解析环境 4======== ...

  2. 【Linux网络基础】网络子网划分基础知识(IP地址,子网)

    一. IP地址分类与子网划分基础 1. 什么是IP地址? 常见的ip地址版本为ipv4, ipv6 32位 4 * 8=32位. 32位二进制数字序列组成的数字序列   点分十进制 采用点将32位数字 ...

  3. AIX如何点亮HBA卡

    不要选中分区,选择系统管理下的服务器即可 LED状态----->启动Advanced System Management(ASM) UserID:  admin Password:admin S ...

  4. vue-cli创建的webpack工程中引用ExtractTextPlugin导致css背景图设置无效的解决方法

    当我们用vue-cli创建项目后,如果在我们的template模板文件中的css样式设置中,有设置了background-image的属性,并且url值传入的是相对路径,那么当我们在打包生产代码时,w ...

  5. tr标签使用hover的box-shadow效果不生效

    先说问题: 这是大致的HTML结构 <table cellpadding="0" cellspacing="0"> <thead> &l ...

  6. ST函数(ST表)RMQ O(1)查询 离线

    ST算法是基于倍增的动态规划算法. #include<iostream> #include<cstdio> #include<cstdlib> #include&l ...

  7. Socket中SO_REUSEADDR简介

    SO_REUSEADDR:字面意思重复使用地址 一般来说,一个端口释放后会等待两分钟之后才能再次被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用. SO_REUSEADDR用于对TC ...

  8. Jmeter 数据库测试

    1.环境准备,下载驱动 mysql-connector-java-5.1.45-bin.jar 下载的 jar 包保存在 Jmeter 的文件的 lib 下的 ext 目录下,则不需要做其他的配置了, ...

  9. ln命令:软链接与硬链接的区别与应用

    ln命令:软链接与硬链接的区别与应用 摘要 Linux系统中,链接是一个十分常见且实用的文件处理命令,它分为软链接和硬链接两种类型.软链接类似于Windows中的快捷方式,硬链接又有着与原文件保持同步 ...

  10. 洛谷P5018 对称二叉树

    不多扯题目 直接题解= = 1.递归 由题目可以得知,子树既可以是根节点和叶节点组成,也可以是一个节点,题意中的对称二叉子树是必须由一个根节点一直到树的最底部所组成的树. 这样一来就简单了,我们很容易 ...