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. eclipse 创建maven项目失败

    问题描述: eclipse 初次创建maven项目报错 可能是maven-archetype-quickstart:1.1.jar 包失效了或者没有? 有人说把这个jar包放在maven本地仓库里 我 ...

  2. CF1285 --- Dr. Evil Underscores

    CF1285 --- Dr. Evil Underscores 题干 Today as a friendship gift, Bakry gave Badawy \(n\) integers \(a_ ...

  3. Vue Cli 3 搭建单页应用项目刷新 404 问题 解决方案(以Apache为例)

    vue 项目 版本 Vue Cli 3.3 官方文档 https://router.vuejs.org/zh/guide/essentials/history-mode.html 因为本项目部署在 A ...

  4. telnet 636端口不通

    今天发生了一件奇怪的事情,LDAP的636端口突然就不通了报错如下 [www@DC ~]$ telnet 10.219.90.173 636Trying10.219.90.173...Connecte ...

  5. 数学--数论--hdu 6216 A Cubic number and A Cubic Number (公式推导)

    A cubic number is the result of using a whole number in a multiplication three times. For example, 3 ...

  6. Ant 环境安装

    1.下载安装 Ant,配置环境变量 进入 http://ant.apache.org/bindownload.cgi 下载 Ant 配置环境变量 新建 ANT_HOME 配置 Path 环境变量 配置 ...

  7. .net core 基于Dapper 的分库分表开源框架(core-data)

    一.前言 感觉很久没写文章了,最近也比较忙,写的相对比较少,抽空分享基于Dapper 的分库分表开源框架core-data的强大功能,更好的提高开发过程中的效率: 在数据库的数据日积月累的积累下,业务 ...

  8. dp (1)

    D - Tree of Tree ZOJ - 3201 这个题目我开始是这么定义的dp[i][j][0] dp[i][j][1] 表示对于第i个节点还有j个的选择 0 代表不选这个节点,1 代表选这个 ...

  9. K - Leapin' Lizards HDU - 2732 网络流

    题目链接:https://vjudge.net/contest/299467#problem/K 这个题目从数据范围来看可以发现是网络流,怎么建图呢?这个其实不是特别难,主要是读题难. 这个建图就是把 ...

  10. 龙贝格算法 MATLAB实现

    龙贝格算法主要是不断递推和加速,直到满足精度要求 递推: 加速: 得到T表: MATLAB代码: function I = Romberg(f, a, b, epsilon) I = 0; h = b ...