poj 1679 The Unique MST(最小树不唯一的判定)

次小生成树(POJ 1679 The Unique MST) 先利用prim算法求出最小生成树,然后通过往MST里加边来判断新生成的最小生成树是否具有最小的权值,POJ上The Unique MST(1679)题是要求判断最小生成树是否唯一,此题其实根本不用这样做,但是为了练习球次小生成树还是写了这样的代码,已用G++AC。 立即下载

The Unique MST
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 16068 Accepted: 5566

Description

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

Definition 1 (Spanning Tree): Consider a connected, undirected graph G = (V, E). A spanning tree of G is a subgraph of G, say T = (V', E'), with the following properties: 
1. V' = V. 
2. T is connected and acyclic. 

Definition 2 (Minimum Spanning Tree): Consider an edge-weighted, connected, undirected graph G = (V, E). The minimum spanning tree T = (V, E') of G is the spanning tree that has the smallest total cost. The total cost of T means the sum of the weights on all the edges in E'. 

Input

The first line contains a single integer t (1 <= t <= 20), the number of test cases. Each case represents a graph. It begins with a line containing two integers n and m (1 <= n <= 100), the number of nodes and edges. Each of the following m lines contains a triple (xi, yi, wi), indicating that xi and yi are connected by an edge with weight = wi. For any two nodes, there is at most one edge connecting them.

Output

For each input, if the MST is unique, print the total cost of it, or otherwise print the string 'Not Unique!'.

Sample Input

2
3 3
1 2 1
2 3 2
3 1 3
4 4
1 2 2
2 3 2
3 4 2
4 1 2

Sample Output

3
Not Unique!

Source


思路:按并查集,先解出第一次的最小树,然后标记所有用过的边,和所具有相同权值的边。然后依次删除用过的具有相同权值的边,看最小生成树的值是不是一样,一样则最             小树不唯一。

易错点:权值全为0 要注意。

               2 

               3 2

               1 2 0

               2 3 0

               3 3

                1 2 0

                 2 3 0

                1 3 0


#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int mm=110000;
const int oo=1e9;
int root[mm],ran[mm];
class node
{
  public:int u,v,c;
  bool used,equ,del;
  node(){used=equ=del=0;}
}edge[mm];
int m,n,cen;
bool cmp(node a,node b)
{
  return a.c<b.c;
}
int look(int x)
{
  if(x^root[x])root[x]=look(root[x]);
  return root[x];
}
void uni(int x,int y)
{
  if(ran[look(x)]>ran[look(y)])root[look(y)]=look(x),ran[look(x)]+=ran[look(y)];
  else root[look(x)]=look(y),ran[look(y)]+=ran[look(x)];
}
int kruskal()
{ cen++;int sum=0,num=0;
  for(int i=0;i<m;i++)
  {
    if(edge[i].del)continue;
    if(look(edge[i].u)^look(edge[i].v))
    {uni(edge[i].u,edge[i].v);
     sum+=edge[i].c;num++;
     if(cen==1)
     edge[i].used=1;
    }
    if(num>=n-1)break;
  }
  if(num<n-1)return -oo;///不能构成最小树
  return sum;
}
void _set()
{
  for(int i=0;i<=n;i++)
      root[i]=i,ran[i]=1;
}
int main()
{
  int cas;
  while(cin>>cas)
  { while(cas--)
    { memset(edge,0,sizeof(edge));
      cin>>n>>m;
      for(int i=0;i<m;i++)
      {
      cin>>edge[i].u>>edge[i].v>>edge[i].c;
      }
      for(int i=0;i<m;i++)
      for(int j=0;j<m;j++)
      if(i^j&&edge[i].c==edge[j].c)
      edge[i].equ=edge[j].equ=1;
      sort(edge,edge+m,cmp);
     _set();int ans=0,z;
     cen=0;ans=kruskal();
     ///if(ans==-oo)ans=0;
     bool flag=1;
     for(int i=0;i<m;i++)
     {
       if(edge[i].used&&edge[i].equ)
       {  _set();
         edge[i].del=1;z=kruskal();edge[i].del=0;
         if(z==ans){flag=0;break;}
       }
     }
     if(!flag)cout<<"Not Unique!\n";
     else cout<<ans<<"\n";
   }
  }
}




从SFF-8087到SFF-8643:详解服务器硬盘背板连接线缆的演变与实战接线 本文深度解析了服务器硬盘背板连接技术从SFF-8087到SFF-8643的演进历程,重点介绍了SAS、SATA和U.2接口的技术特点与实战接线方案。通过对比不同连接器标准的物理特性和电气规范,提供了混合环境下的线缆选择策略和常见故障排查指南,帮助IT专业人员优化存储系统性能与稳定性。 阅读详情

相关推荐

【史诗级】详细阐述借助AI实现对Windows蓝屏原因进行精确定位的方法

在解决问题的过程中我决定把这一切都记录下来,并整理出一套通用的方法,方便快速精确定位引起蓝屏的真实原因。今天我的蓝屏代码是0x000000ef,而你或许是遇到另一个蓝屏代码,代码本身代表的含义不是这里的讨论重点,重要的是解决问题的底层逻辑。

sprlightning的博客 1万+

The Unique MST(最小生成树的唯一路径)

最小生成树唯一的路径就是当前权值里,仅有一条路可以走,不存在最小权值一样的情况,如:1 2 2, 2 3 2, 1 3 2,第一次路径为1—2权值为2,但当下一次到3这个点时就存在分歧,因为1—3的权值是2,2—3的权值也是2,有两个选择。 例题: https://vjudge.net/contest/319242#problem/K Given a connected...

qq_44859533的博客 1227

ARM学习 | 紧耦合存储器 (TCM)

TCM 是一种专用的片上存储器,直接与处理器核心耦合。确定性访问:由于不涉及缓存替换或一致性管理,访问延迟固定。高带宽:TCM 通常通过专用总线连接处理器核心,可以提供更高的数据吞吐率。用户管理:TCM 的分配和管理完全由开发者控制,不依赖硬件缓存策略。ARM 处理器中的 TCM 通常分为ITCM(指令紧耦合存储器)和DTCM(数据紧耦合存储器),分别用于存储指令和数据。TCM 是 ARM 处理器中不可忽视的重要特性,在实时系统和高性能嵌入式应用中具有重要地位。

qq_43167806的博客 3329

The Unique MST 判断生成树是否唯一

                          The Unique MST 题目抽象:给你一个连通无向网,判断生成树是否唯一。 分析 :判定最小生成树是否唯一的一个正确思路为: 1) 对图中每条边,扫描其他边,如果存在相同权值的边,则对该边作标记;2) 然后用 Kruskal 算法(或 Prim 算法)求 MST;3) 求得 MST 后,如果该 MST 中未包含作了标记的边,即可判定 ...

weixin_30736301的博客 268

ECMWF等大气数据批量下载(Python API)详细步骤

ECMWF等大气数据批量下载(Python API) 遥感方向做热红外温度反演,不可避免的要用到大气廓线数据,大气数据具有实时性,比如2018年9月1日的早上8点的影像,为了提高反演精度就需要用到时间上与其相差尽可能接近的大气数据,用于消除大气的影响,如果数据量较少我们可以查看影像的时间和空间范围进行下载,但是如果处理某个较大区域时可能涉及到大量的影像,如果一景一景对应查找去下载会很麻烦,因此针对大量数据的自动批量下载很有必要。本文根据 https://cds.climate.copernicus.eu/#

liuxiaojiangtobeno1的博客 1万+

【Chipyard】Gemmini快速上手

Gemmini 加速器在 ResNet50 推理任务中表现出计算密集型优势,核心操作周期分布符合深度学习模型特征,推理预测流程完整且测试通过,为后续硬件优化和模型部署提供了有效参考。

2358

The Unique MST(最小生成树prime)

Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spanning Tree): Consider a connected, undirected graph G = (V, E). A spanning tree of G is a subgraph of ...

weixin_44313771的博客 369

【深度解析】信息素养提升实践活动(附:历年获奖作品分析)

全国师生信息素养提升实践活动是由教育部教育技术与资源发展中心(中央电化教育馆)主办,面向全国师生的一项信息化交流展示活动。

m0_74417957的博客 9649

C++图论提高——The Unique MST (最小生成树 Kruskal算法)

题目描述(传送门) 给定连接的无向图,告诉它的最小生成树是否唯一。 定义1(生成树):考虑连通的无向图G =(V,E)。G的生成树是G的子图,比如T =(V',E'),具有以下属性: 1.V'= V. 2.T是连通的和非循环的。 定义2(最小生成树):考虑边加权,连通,无向图G =(V,E)。G的最小生成树T =(V,E')是总成本最小的生成树。T的总成本是指E'中所有边缘的权重之和。...

qq_44013342的博客 955

AI驱动的网络安全运维:智能化时代的安全保障

本项目旨在使用Python和AI技术构建一个智能化的网络安全运维系统,能够实时监测网络流量,检测潜在的安全威胁,并自动采取应对措施,从而提升网络安全管理的效率和准确性。具体内容包括:环境配置与依赖安装数据采集与预处理机器学习模型构建与训练实时威胁检测与响应实际应用案例通过本文的介绍,我们展示了如何使用Python和AI技术构建一个智能化的网络安全运维系统。

Echo_Wish 1290

评估篇| 大模型评测综述

1、基于人类的评测。与针对基础大语言模型的自动化评测不同,微调大语言模型的评测更加注重模型在实际应用场景中的表现,如与人类交互的自然度、对齐度等。2、基于模型的评测。例如,AlpacaEval 排行榜 基于由大语言模型合成的人类需求指令作为评测任务,然后收集待评估大模型的回应,并采用 GPT-4 等大语言模型作为评测员,将待评估大语言模型的输出与参考输出进行成对比较。1、大语言模型对评估设置极为敏感,包括问题的表述方式、提示样本的选择以及答案的解析策略等,这些细微的差别都可能导致评估结果的显著变化。

youbingchen的博客 636

POJ 1679 The Unique MST 次小生成树

http://poj.org/problem?id=1679 问图的最小生成树是否唯一。 如果次小生成树结果=最小生成树,那么最小生成树就不唯一。 暴力删属于最小生成树的边,在跑kruskal即可。#include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct Edge { int u,

とある黄鱼のOIブログ 592

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[POJ 1679] The Unique MST 最小树

http://poj.org/problem?id=1679题意:给你一棵树,判断最小树是不是唯一的。思路:求最小树,保存最小树中的边,然后枚举所有不再树中的边,将这条边加入树中,判断形成的环中是否有两条一样的边,如果有那么最小树就不唯一。

AcmHonor的专栏 550

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

poj 1679 The Unique MST(次小生成树)

题目链接:http://poj.org/problem?id=1679 就是求是否有多条最小树 跑两次最小树第二次的时候循环一下上一次用过的边不要连这个边看一下次小生成树是否与最小生成树权值一样 #include <iostream> #include <cstring> #include <algorithm> #include &...

awow80285的博客 85

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

POJ1679 The Unique MST(次小生成树)【★】

The Unique MST HERE Description Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spanning Tree): Consider a connected, undirected graph G = (V, E). A spa...

qq_45739382的博客 152

POJ1679 The Unique MST 【次小生成树】

The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20421   Accepted: 7183 Description Given a connected undirected graph, tell if its minimum s

长风的专栏 1000

POJ 1679 The Unique MST

这是一个次小生成树的题目,我们知道要求最小生成树的方法,次小生成树在最小生成树的基础上运算就可以了,这里采用最简单的方法就是去掉最小生成树集合当中的每一条边再做kruskal,每次kruskla的时间复杂度有mlogm+m,进行最小生成树中边集的枚举复杂度为(n-1)*(m*logm+m),这题还是做到的,还有一种更好的方法,只要做一次kruskal就好了,实现起来有点复杂。 先贴本题的代码:

Peanuts_D 696

poj 1679 The Unique MST(次小生成树变形)

The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 25231   Accepted: 9012 Description Given a connected undirected graph, tell if its minimum spa

张小象 423

The Unique MST(判断最小生成树是否唯一)C语言

Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spanning Tree): Consider a connected, undirected graph G = (V, E). A spanning tree of G is a subgraph of G, say T = (V', E'), with the following properties: 1.

Sky~的博客 775

The Unique MST

The Unique MST Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spanning Tree): Consider a connected, undirected graph G = (V, E). A spanning tree of G is a subgraph of G, say T = (V’, E’), with the following p

weixin_52879528的博客 158

【刷题记录】 POJ1679 The Unique MST 次小生成树

给你一个有权值的无向图,判断图中最小生成树是否唯一;若唯一则输出最小生成树的权值和,否则输出‘Not Unique!’

这里是阿安的博客 367

【模板·次小生成树】 The Unique MST

题目:The Unique MST 代码: #include&lt;cstdio&gt; #include&lt;vector&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt; using namespace std; #define maxn 100 #define maxm 10000 #define read(x) scanf("%...

iwi 276

poj1679The Unique MST(最小生成树)

题意: 如果该图存在次小生成树(与原最小生成树不同,但长度小于等于原最小生成树),则一定可以通过从原最小生成树中去掉一个边并再入一个边得到。 如果要加入一个v1和v2之间的新边,那么则应去掉原有的两点间通路(是唯一通路)中的一条边才能构成生成树。那么为了保证生成树最小,则应去掉原通路上最长的那条边。 对于本题我们的做法是先求最小生成树,然后枚举每一条没有在最小生成树中的边,看加入树中并去掉通

Kirito_j的博客 512
上一篇: CF-31E-TV Game(dp)
下一篇: ZOJ 1298 poj 1135 Domino Effect(最短路,dij)
剑不飞
博客等级 码龄15年 86粉丝 505原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值