The Unique MST(poj 1679)
题意:求次小生成树,若权值和与最小生成树相等,输出"Not Unique!" ;否则,输出mst
/*
次小生成树
首先明白一点,次小生成树是由最小生成树改变一条边得来的,然后我们就可以先求出最小生成树,
然后枚举没在最小生成树中的边(x、y、z),用这条边来替换树中x、y之间的一条边,很显然,替换
时应该替换x、y中的最长边,所以可以预处理出树中x、y之间的最长边。
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define N 110
#define INF 1000000000
using namespace std;
int head[N],g[N][N],fa[N],vis[N*N],n,m,cnt,mst;
struct node
{
int x,y,z;
};node ee[N*N];
struct Node
{
int v,pre,t;
};Node e[N*];
bool cmp(const node&s1,const node&s2)
{
return s1.z<s2.z;
}
int find(int x)
{
if(fa[x]==x)return x;
return fa[x]=find(fa[x]);
}
void add(int x,int y,int z)
{
++cnt;
e[cnt].v=y;
e[cnt].t=z;
e[cnt].pre=head[x];
head[x]=cnt;
}
void dfs(int s,int now,int from,int mmx)
{
g[s][now]=mmx;
for(int i=head[now];i;i=e[i].pre)
if(e[i].v!=from)
dfs(s,e[i].v,now,max(mmx,e[i].t));
}
void work()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)fa[i]=i;
for(int i=;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&ee[i].x,&ee[i].y,&ee[i].z);
}
sort(ee+,ee+m+,cmp);
for(int i=;i<=m;i++)
{
int a=find(ee[i].x),b=find(ee[i].y);
if(a!=b)
{
fa[a]=b;mst+=ee[i].z;vis[i]=;
add(ee[i].x,ee[i].y,ee[i].z);
add(ee[i].y,ee[i].x,ee[i].z);
}
}
for(int i=;i<=n;i++)
dfs(i,i,-,);
int ans=INF;
for(int i=;i<=m;i++)
if(!vis[i])
ans=min(ans,mst-ee[i].z+g[ee[i].x][ee[i].y]);
if(ans==mst)printf("Not Unique!\n");
else printf("%d\n",mst);
}
int main()
{
int T;scanf("%d",&T);
while(T--)
{
memset(g,,sizeof(g));
memset(fa,,sizeof(fa));
memset(head,,sizeof(head));
memset(vis,,sizeof(vis));
mst=cnt=;
work();
}
return ;
}
The Unique MST(poj 1679)的更多相关文章
- hdu 1679 The Unique MST (克鲁斯卡尔)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24152 Accepted: 8587 D ...
- poj1679 The Unique MST(最小生成树唯一性)
最小生成树的唯一性,部分参考了oi-wiki 如果一条不在最小生成树边集内的边,它可以替换一条在最小生成树边集内,且权值相等的边,那么最小生成树不是唯一的 同过kruskal来判断 考虑权值相等的边, ...
- POJ 1679 The Unique MST(次小生成树)
题意:求解最小生成树的权值是否唯一,即要我们求次小生成树的权值两种方法求最小生成树,一种用prim算法, 一种用kruskal算法 一:用prim算法 对于给定的图,我们可以证明,次小生成树可以由最小 ...
- POJ 1679 The Unique MST (最小生成树)
The Unique MST 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/J Description Given a conn ...
- POJ 1679:The Unique MST(次小生成树&&Kruskal)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19941 Accepted: 6999 D ...
- poj1679 The Unique MST(判定次小生成树)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 23180 Accepted: 8235 D ...
- POJ1679:The Unique MST(最小生成树)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 38430 Accepted: 14045 ...
- POJ1679The Unique MST(次小生成树)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25203 Accepted: 8995 D ...
- The Unique MST (判断是否存在多个最小生成树)
The Unique MST Time Limit: 10 ...
随机推荐
- Ext comboBox的remote和local的区别
remote模式下不能使用模糊查询的功能 而local模式下可以实现模糊查询的功能 如果非要实现模糊查询的功能,最好就是提前把数据查询出来,缓存到本地,然后再用local模式 且,改个属性,改成可编辑 ...
- 部署搭建 Saltstack(centos6.6)
SaltStack介绍 官网:https://docs.saltstack.com/en/latest/ 中国saltstack用户组http://www.saltstack.cn/ 下图是它的子系统 ...
- javascript判断文件大小
<input type="file" id="fileName" name ="fileName" onchange="Ge ...
- 解决IE apk变成zip:Android 手机应用程序文件下载服务器 配置解决方法
APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ...
- 有关基于模型的设计(MBD)一些概念和理解(zz)
http://www.matlabsky.com/thread-38774-1-1.html 本文转载于MathWorks中国高级工程师董淑成的帖子内容.为了方便阅读,对原文进行了重新整理编辑. 之前 ...
- shell中的循环
shell中的循环 for循环 类似于C语言的步长控制 例如: ;i<=;i++)); ); done 将1到10,依次乘以4,然后打印出来. 这里顺便提一下,shell里面表达式的计算,可以有 ...
- Lua函数之二
Lua函数之二 Lua中函数的两个重要特性: 1.函数和其他类型(如number.string)一样,可以存放在变量中,也可以存放在table中,可以作为函数的参数,还可以作为函数的返回值. 2.嵌套 ...
- zabbix 分布式监控(proxy)源码安装
安装分布式监控(代理节点) 1.下载软件zabbix-3.2.1.tar.gz 1.1 解压 wget http://nchc.dl.sourceforge.net/project/zabbix/ZA ...
- linux crontab介绍
第1列分钟1-59第2列小时1-23(0表示子夜)第3列日1-31第4列月1-12第5列星期0-6(0表示星期天)第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令 这 ...
- Java Socket 网络编程心跳设计概念
Java Socket 网络编程心跳设计概念 1.一般是用来判断对方(设备,进程或其它网元)是否正常动行,一 般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于 ...