poj1679 The Unique MST(最小生成树唯一性)
最小生成树的唯一性,部分参考了oi-wiki
如果一条不在最小生成树边集内的边,它可以替换一条在最小生成树边集内,且权值相等的边,那么最小生成树不是唯一的
同过kruskal来判断
考虑权值相等的边,记录有几条边是目前可以被选入的,和实际选入了几条边,如果不相同,则最小生成树不唯一
原因是如果出现这两个值不相等的情况,则一定出现了环,且这个环内至少有两条边权值相同
具体实现,用一个\(\text{tail}\)指针指向当前权值的最后一条边,当\(\text{i}>\text{tail}\)(也就是当前边权的边全部被考虑完)的时候,就去判断上述的两个值是否相等
注意kruskal循环的时候要循环到\(m+1\),这样如果权值最大的一部分边要被选到的话,会在\(i=m+1\)的时候进行判断
而且在判断当前选的边数已经等于\(n-1\),不能直接跳出,要等到\(\text{i}>\text{tail}\)判断那两个值是否相等,如果相等再跳出,否则也是不唯一
当然网上也有那种每次删边跑kruskal的做法,但复杂度明显没有这个优秀
模板题
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<iomanip>
#include<cstring>
#define reg register
#define EN std::puts("")
#define LL long long
inline int read(){
int x=0,y=1;
char c=std::getchar();
while(c<'0'||c>'9'){if(c=='-') y=0;c=std::getchar();}
while(c>='0'&&c<='9'){x=x*10+(c^48);c=std::getchar();}
return y?x:-x;
}
int n,m;
struct data{
int from,to,w;
}e[10006];
int fa[10006];
inline int cmp(data aa,data aaa){return aa.w<aaa.w;}
inline int find(int k){return k==fa[k]?k:fa[k]=find(fa[k]);}
int main(){int t=read();while(t--){
n=read();m=read();
for(reg int i=1;i<=n;i++) fa[i]=i;
for(reg int i=1;i<=m;i++){
e[i].from=read();e[i].to=read();e[i].w=read();
}
std::sort(e+1,e+1+m,cmp);
int ans=0,cnt=1,tail=0;
int choose=0,sum=0;
for(reg int i=1;i<=m+1;i++){
if(i>tail){
// std::printf("%d %d\n",choose,sum);
if(choose!=sum) goto NOT;
if(cnt>=n) break;
sum=choose=0;
for(tail++;e[tail].w==e[i].w&&tail<=m;tail++)
if(find(e[tail].from)!=find(e[tail].to)) sum++;//如果这条边目前能被加进去,sum才+1
tail--;
}
int from=find(e[i].from),to=find(e[i].to);
if(from==to) continue;
cnt++;fa[from]=to;
if(cnt<=n) ans+=e[i].w,choose++;;
}
std::printf("%d\n",ans);continue;
NOT:;std::puts("Not Unique!");
}
return 0;
}
poj1679 The Unique MST(最小生成树唯一性)的更多相关文章
- [poj1679]The Unique MST(最小生成树)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28207 Accepted: 10073 ...
- POJ1679 The Unique MST(Kruskal)(最小生成树的唯一性)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 27141 Accepted: 9712 D ...
- POJ-1679 The Unique MST(次小生成树、判断最小生成树是否唯一)
http://poj.org/problem?id=1679 Description Given a connected undirected graph, tell if its minimum s ...
- POJ1679 The Unique MST[次小生成树]
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28673 Accepted: 10239 ...
- POJ1679 The Unique MST 【次小生成树】
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20421 Accepted: 7183 D ...
- POJ1679 The Unique MST 2017-04-15 23:34 29人阅读 评论(0) 收藏
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 29902 Accepted: 10697 ...
- 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 ...
- poj1679 The Unique MST(判定次小生成树)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 23180 Accepted: 8235 D ...
- POJ-1679.The Unique MST.(Prim求次小生成树)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 39561 Accepted: 14444 ...
随机推荐
- uni_app商城项目(完成)
总结: 1.uni-app的跨段适配性,真的特别强,完成相关代码的书写,HbuilderX编辑器提供的打包十分方便. 2.开发小程序,H5等移动端开发, 比开发电脑端简单不少,但有时候坑也挺多的. 3 ...
- 白话说编程之java线程
线程和进程: 在说多线程之前,我们先来研究一下线程,说到线程,我们又不得不说到进程,因为很多初学者会把线程和进程分不清,搞混淆. 进程: 是操作系统系统运行的最小单元.怎么理解这句话,可以这样去对比, ...
- Django 已生成数据时怎么查询数据库
数据库已写好时,怎样查询数据库 1.输入命令:python manage.py inspectdb > model1.py 注:>重定向 到model1.py
- OS-DOS/CMD/Windows/各类软件快捷键等使用总结
一.快捷键 很多软件的快捷键使用相通,在不确定的情况下,先试试其他软件的快捷键的使用方法 Windows电脑快捷键 HP惠普笔记本 win+E 打开文件管器 win+D 显示桌面 win+L 锁计算机 ...
- Mysql fundamental knowledge
Mysql 5.1, 5.5 are more stable than other versions. postgresql has more strict "sql standard &q ...
- python3(三十七) filepath
""" file path """ __author__on__ = 'shaozhiqi 2019/9/23' # !/usr/bin/e ...
- hadoop(五)scp命令copy文件和配置(完全分布式准备二)|7
机器的克隆参考centos7克隆ip|机器名|映射关系|别名配置(hadoop完全分布式准备一) 那么问题来了,如果我们有30台机器,之间可以互相访问,那我们如何快速安装配置环境如jdk hadoop ...
- Camunda 流程引擎的一种 Adapter 层实现
上一篇说明了选择 Camunda 的理由.这一篇说明如何实现适配层. 当前还没有专门写一篇对 Camunda 各个功能的详细介绍.如果要获得比较直观的感受,可以下载 Modeler 或者使用在线版的 ...
- V - Largest Rectangle in a Histogram HDU - 1506
两种思路: 1 单调栈:维护一个单调非递减栈,当栈为空或者当前元素大于等于栈顶元素时就入栈,当前元素小于栈顶元素时就出栈,出栈的同时计算当前值,当前值所包含的区间范围为从当前栈顶元素到当前元素i的距离 ...
- 原创hadoop2.6集群环境搭建
三台机器: Hmaster 172.168.2.3.Hslave1 172.168.2.4.Hslave2 172.168.2.6 JDK:1.8.49 OS:red hat 5.4 64 (由于后期 ...