poj_1679: The Unique MST【次小生成树】
希望注释足够清楚。。欢迎指出不足~
#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【次小生成树】的更多相关文章
- POJ1679 The Unique MST[次小生成树]
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28673 Accepted: 10239 ...
- POJ 1679 The Unique MST (次小生成树 判断最小生成树是否唯一)
题目链接 Description Given a connected undirected graph, tell if its minimum spanning tree is unique. De ...
- POJ_1679_The Unique MST(次小生成树)
Description Given a connected undirected graph, tell if its minimum spanning tree is unique. Definit ...
- POJ1679 The Unique MST —— 次小生成树
题目链接:http://poj.org/problem?id=1679 The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total S ...
- POJ-1679 The Unique MST,次小生成树模板题
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Description Given a connected undirec ...
- POJ_1679_The Unique MST(次小生成树模板)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 23942 Accepted: 8492 D ...
- POJ 1679 The Unique MST (次小生成树)
题目链接:http://poj.org/problem?id=1679 有t组数据,给你n个点,m条边,求是否存在相同权值的最小生成树(次小生成树的权值大小等于最小生成树). 先求出最小生成树的大小, ...
- poj1679The Unique MST(次小生成树模板)
次小生成树模板,别忘了判定不存在最小生成树的情况 #include <iostream> #include <cstdio> #include <cstring> ...
- POJ 1679 The Unique MST (次小生成树kruskal算法)
The Unique MST 时间限制: 10 Sec 内存限制: 128 MB提交: 25 解决: 10[提交][状态][讨论版] 题目描述 Given a connected undirect ...
- poj 1679 The Unique MST (次小生成树(sec_mst)【kruskal】)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 35999 Accepted: 13145 ...
随机推荐
- (转)导出EXCEL时科学计数法问题
//1) 文本:vnd.ms-excel.numberformat:@ //2) 日期:vnd.ms-excel.numberformat:yyyy/mm/dd //3) 数字:vnd.ms-e ...
- WPF Dashboard仪表盘控件的实现
1.确定控件应该继承的基类 从表面上看,目前WPF自带常用控件中,没有一个是接近这个表盘控件的,但将该控件拆分就能够发现,该控件的每个子部分都是在WPF中存在的,因此我们需要将各个子控件组合才能形成这 ...
- 锁和监视器之间的区别 – Java并发
在面试中你可能遇到过这样的问题:锁(lock)和监视器(monitor)有什么区别? 嗯,要回答这个问题,你必须深入理解Java的多线程底层是如何工作的. 简短的答案是,锁为实现监视器提供必要的支持. ...
- Linux上的防病毒软件ClamAV
Clam AntiVirus(ClamAV)是免费而且开放源代码的防毒软件,软件与病毒码的更新皆由社群免费发布.目前ClamAV主要是使用在由Linux.FreeBSD等Unix-like系统架设的邮 ...
- 关于ArcGIS Android的在x86和x64系统中兼容性的问题与解决方案
我们都知道,在配置ArcGIS Android SDK时,需要在jniLibs目录下放置三个文件夹,分别是armeabi.armeabi-v7a.x86三个文件夹,ArcGIS Android针对目标 ...
- EntityFramework连接SQLite
EF很强大,可惜对于SQLite不支持CodeFirst模式(需要提前先设计好数据库表结构),不过对SQLite的数据操作还是很好用的. 先用SQLiteManager随便创建一个数据库和一张表:
- [leetcode-494-Target Sum]
You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symb ...
- Http异步发送之HttpWebRequest的BeginGetResponse
关于http异步发送,一开始我的做法都是用thread或者task去完成的:后来发现HttpWebRequest本身就提供一个异步的方法. 总感觉.Net自己提供的异步方法可能要优于我们自己用线程去实 ...
- Js作用域&作用域链
js构建类 一 构建类的原则 构造函数 等于 原型的constructor //构造函数 function Hero(name,skill){ this.name = name; this.skill ...
- AngularJS4.0环境搭建详解--windows系统环境
第一步:安装NodeJS 下载最新版的NodeJS并安装,安装完成后打开CMD命令行,输入以下命令: node -v 若返回类似版本号则代表NodeJS安装成功,如下: 第二部 安装npm 新版的No ...