题目链接

参考博客

希望注释足够清楚。。欢迎指出不足~

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

;
const int INF=0x3f3f3f3f;

int n,m;
int mp[maxn][maxn];
int maxlen[maxn][maxn];        //maxlen[i][j]表示
                            //生成树上,从 点i到点j的所有边中的最大边长
int dis[maxn],pre[maxn];    //dis表示的其实是边长
int vis[maxn];
int mst;

int prim()
{
    mst=;
    vis[]=;
    ; i<=n; i++)
        dis[i]=mp[][i],pre[i]=;
    ; i<n; i++)    //总共需要再加入n-1个节点
    {
        int min_dis=INF,nx,pr;
        //nx表示下一个要进入MST中的结点
        //pr表示与nx相连的已经在MST中的结点
        //min_dis表示MST与V-MST间的最短距离
        ; j<=n; j++)
            if(!vis[j]&&dis[j]<min_dis)
                nx=j,min_dis=dis[nx];
        pr=pre[nx];
        mst+=mp[nx][pr];
        maxlen[nx][pr]=maxlen[pr][nx]=mp[nx][pr];
        ; j<=n; j++) if(vis[j])    //更新从j沿MST到nx的最小边长
            maxlen[j][nx]=maxlen[nx][j]=max(maxlen[j][pr],maxlen[nx][pr]);
        vis[nx]=;
        ;j<=n;j++)
            if(!vis[j]&&mp[nx][j]<dis[j])
                dis[j]=mp[nx][j],pre[j]=nx;
    }
    ;i<n;i++)
        ;j<=n;j++)
            if(pre[i]==j||pre[j]==i)    //此时边i-j在MST中
                continue;
            else if(maxlen[i][j]==mp[i][j])//存在不止一个MST
                ;
    ; //只有一个MST
}

void init()
{
    memset(mp,INF,sizeof(mp));
    memset(maxlen,-INF,sizeof(maxlen));    //之后要不断取max进行更新
    memset(vis,,sizeof(vis));
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        init();
        scanf("%d%d",&n,&m);
        ; i<m; i++)
        {
            int u,v,w;
            scanf("%d%d%d",&u,&v,&w);
            mp[u][v]=mp[v][u]=w;
        }
        if(prim()) printf("%d\n",mst);
        else puts("Not Unique!");
    }
}

poj_1679: The Unique MST【次小生成树】的更多相关文章

  1. POJ1679 The Unique MST[次小生成树]

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28673   Accepted: 10239 ...

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

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

  3. POJ_1679_The Unique MST(次小生成树)

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

  4. POJ1679 The Unique MST —— 次小生成树

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

  5. POJ-1679 The Unique MST,次小生成树模板题

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K       Description Given a connected undirec ...

  6. POJ_1679_The Unique MST(次小生成树模板)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 23942   Accepted: 8492 D ...

  7. POJ 1679 The Unique MST (次小生成树)

    题目链接:http://poj.org/problem?id=1679 有t组数据,给你n个点,m条边,求是否存在相同权值的最小生成树(次小生成树的权值大小等于最小生成树). 先求出最小生成树的大小, ...

  8. poj1679The Unique MST(次小生成树模板)

    次小生成树模板,别忘了判定不存在最小生成树的情况 #include <iostream> #include <cstdio> #include <cstring> ...

  9. POJ 1679 The Unique MST (次小生成树kruskal算法)

    The Unique MST 时间限制: 10 Sec  内存限制: 128 MB提交: 25  解决: 10[提交][状态][讨论版] 题目描述 Given a connected undirect ...

  10. poj 1679 The Unique MST (次小生成树(sec_mst)【kruskal】)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 35999   Accepted: 13145 ...

随机推荐

  1. Java IO流之【缓冲流和文件流复制文件对比】

    与文件流相比,缓冲流复制文件更快 代码: package Homework; import java.io.BufferedOutputStream; import java.io.File; imp ...

  2. Java常用类之【八种基本数据类型】

    一.装箱和拆箱 装箱:将基本数据类型包装为对应的包装类对象 拆箱:将包装类对象转换成对应的基本数据类型 JDK5.0中为基本数据类型提供了自动装箱(boxing).拆箱(unboxing)功能 二.八 ...

  3. 【WPF】用三角形网格构建三维图形

    虽然WPF只能支持部分三维模型,不过从应用功能开发的角度看,也已经够用了(非游戏开发).WPF 的三维图形,说得简单一点,也就两种而已. 1.把二维对象放到三维空间中,这个应该较为好办,像 Image ...

  4. C语言到C++(1) - 基本变化

    说到C++和C语言的区别,大部分人都会想到面向对象和面向过程.然而这种说法并不准确.面向对象和面向过程指的是两种不同的程序设计思想,而C++与C是两种编程语言,难道C++就不能用于面向过程去解决问题吗 ...

  5. openresty使用笔记(一)

    背景介绍 游戏经过一段时间的运营,发现了原来的设计缺陷太多,所以决定重新设计架构.使用到nginx作为核心并通过lua+redis设计实现自己的负载分配方案.先看看下面这张简单的架构图吧~ 从图上看, ...

  6. Codility---MaxProfit

    Task description A zero-indexed array A consisting of N integers is given. It contains daily prices ...

  7. 从netty源码里拿到的关于http错误码,自己学习下

    public static HttpResponseStatus valueOf(int code) { switch (code) { case 100: return CONTINUE; case ...

  8. Step by Step 用Azure Automation 来开虚机(ARM)

    使用Azure Automation来自动化处理各种重复的耗时的云管理任务从而帮助云运维人员提升效率,帮助降低运营成本. 具体相关的介绍以及怎样利用Azure Automation来完成定期开关虚拟机 ...

  9. thinkphp中find()和select()的区别

    1.find()是查找符合条件的第一条数据,返回的是一个一维数组: select()是查找符合条件的所有的数据,返回的是一个二维数组: 2.以下案例 $tech=M('techlevel','HR_C ...

  10. 在PHP中连接数据库的八大步骤

                                                                                   连接数据库的八大步骤  Step1:链接数 ...