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 ...
随机推荐
- C#获取本机磁盘信息
照着书敲的.留作笔记吧. using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...
- windows上使用image库
首先要安装这个库,可以使用pip安装,那么我们要首先安装pip 去https://bootstrap.pypa.io/get-pip.py下载get-pip.py,然后运行python get-pip ...
- appium-向右滑动定位
上面5幅欢迎图,要向右滑动4次再点击[立即体验]才可以到首屏 #首页欢迎图滑动4次 for i in range(4): driver.swipe(1200, 200, 10, 200, 1500) ...
- ArrayList与LinkedList区别
ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个 ...
- ARP欺骗病毒,网页“篡改”,注入iframe代码!
---------------权威资料看这里--------------- 清华大学信息网络工程研究中心-中国教育和科研计算机网应急响应组<ARP 欺骗网页劫持攻击分析>PDF文件,直接I ...
- iOS ASIHTTPRequest用https协议加密请求
iOS 终端请求服务端数据时,为了保证数据安全,我们一般会使用https协议加密,而对于iOS的网络编程,我们一般会使用开源框架:ASIHTTPRequest,但是如果使用传统的http方式,即使忽略 ...
- C#集合接口的继承关系图
- Altera的几个常用的Synthesis attributes
各厂商综合工具,对HDL综合时都定义了一些综合属性这些属性可指定a declaration,a module item,a statement, or a port connection 不同的综合方 ...
- [Unity3D]关于Assets资源目录结构管理
原地址:http://www.cnblogs.com/hisiqi/p/3203515.html 分享个我们项目常用的目录结构,微调过很多次,最终到了这个版本.个人认为这种管理资源方式是不错的.欢迎探 ...
- xcode arc引起的autorelease报错问题
http://blog.csdn.net/xiechengfa/article/details/37971223 自从用上了真苹果,一直升级,现在xcode版本是4.4,或者说是ios5 一直有个问题 ...