PAT T1016 Uniqueness of MST(35)

CCF CSP 201703 4.地铁修建 这道题一开始想用dfs+动态规划做,然而发现很难控制,要么无限展开造成死循环,要么更新不充分。结合动态规划的想法,想到了spfa的bfs做法。然而我现在证明不出来为什么它就对。还是做的题太少了。第一个,dfs 错误的代码,还请路过的朋友指出正确的写法。#include <iostream> #include <vector> #include <algorithm> using namespace 阅读详情

传送门

无向图,判断其mst的唯一性,若没有mst则输出连通分量数。

结论:只有当原图中存在权值相等的边的情况下,才有可能会造成mst不唯一。

还是原来的kruskal算法,但是设置一个两层循环来从小到大遍历边,其中内层循环遍历的都是权值相同的边(神似PAT A1009,在一个有序数列中合并“同类项”。。)

使用两个这样的内层循环:

  • 前者在上一次外层循环的状态下测试每条边的可用性;(计数变量edge)(不union,不会改变原算法结果)
  • 后者在上一次当前循环的状态下测试每条边的可用性。(计数变量conn)

可以看出:

  • 一定有edge>=conn。
  • edge>conn && conn==N-1等价于mst不唯一。(考虑某个内层循环,edge一定比conn多计算了,实质是出现了权值相等且“作用”相同的两条边)

对于判断连通分量数,遍历到边表最后就行了,参考这个总结。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

const int MAXN = 501;
int N, M;
int pre[MAXN];

int edge;                  // 本题核心。一个含义比较特殊的计数变量,比conn更宽松,可以保证edge>=conn  
int conn;
int mst;

struct Edge
{
	Edge(int _n1, int _n2, int _w) :n1(_n1), n2(_n2), w(_w) {}
	int n1, n2, w;
	bool operator<(const Edge& e) const
	{
		return w < e.w;
	}
};
vector<Edge> ve;

void init()
{
	fill(pre + 1, pre + N + 1, -1);
	edge = 0;
	conn = 0;
	mst = 0;
}

int f(int n)
{
	if (pre[n] < 0) return n;
	return pre[n] = f(pre[n]);
}

bool u(int n1, int n2)
{
	int f1 = f(n1);
	int f2 = f(n2);
	if (f1 == f2) return false;
	if (pre[f1] <= pre[f2])           // f1 != f2
	{
		pre[f1] += pre[f2];
		pre[f2] = f1;
	}
	else
	{
		pre[f2] += pre[f1];
		pre[f1] = f2;
	}
	conn++;
	return true;
}

int main()
{
	int n1, n2, w;
	scanf("%d%d", &N, &M);
	init();
	for (; M--;)
	{
		scanf("%d%d%d", &n1, &n2, &w);
		ve.push_back(Edge(n1, n2, w));
	}
	sort(ve.begin(), ve.end());

	for (int i = 0, j, size = ve.size(); i < size; i = j)
	{
		for (j = i; j < size && ve[i].w == ve[j].w; j++)
			if (f(ve[j].n1) != f(ve[j].n2))
				edge++;

		for (j = i; j < size && ve[i].w == ve[j].w; j++)
		{
			if (u(ve[j].n1, ve[j].n2))
				mst += ve[j].w;
			if (conn == N - 1) goto PRINT;     // 跳两层循环
		}
	}

PRINT:
	if (conn != N - 1)
		printf("No MST\n%d\n", N - conn);
	else if (edge > N - 1)                     // 此时已经保证是连通图,conn等于N-1
		printf("%d\nNo\n", mst);
	else if (edge == N - 1)                    // 这里其实不用else if了,因为此时edge一定等于N-1了
		printf("%d\nYes\n", mst);

	return 0;
}
python使用TensorRT报错,多线程或多进程中使用问题 python使用TensorRT报错,Cuda Runtime问题 阅读详情

相关推荐

Vitis开发环境下的双核ARM通信:Hello World背后的AMP架构解析

本文深入解析了Vitis开发环境下ZYNQ双核ARM Cortex-A9处理器的AMP架构与通信机制。通过详细的硬件配置、内存分配和核间通信实现步骤,展示了如何构建高效的双核Hello World系统,为嵌入式系统开发者提供了实用的开发指南和性能优化技巧。

weixin_29162439的博客 218

【PAT顶级】1016 Uniqueness of MST (35 分)【最小生成树/唯一最小生成树】

Given any weighted undirected graph, there exists at least one minimum spanning tree (MST) if the graph is connected. Sometimes the MST may not be unique though. Here you are supposed to calculate the minimum total weight of the MST, and also tell if it is

memcpy0的博客 1795

Mediapipe姿态估计——用坐标计算手指关节弯曲角度并实时标注

利用mediapipe搭建姿态检测模型;mediapipe人体标注节点坐标;mediapipe计算手指弯曲角度并实时渲染;mediapipe计算关节弯曲角度。mediapipe手势识别;mediapipe姿态检测模型;mediapipe学习。

kalakalabala的博客 1万+

1016. Uniqueness of MST (35)

感想: krusual算法(可能拼错了 逃。。。 注意点,判断是否唯一条件:如果在用krusual算法的时候运行到某条边时,发现至少有两条边权重相同且都可以加入,我们假设为1边和2边,然后你添加了1边,运行到最后结果你发现2边并不在最后的MST中,那你就想,如果我那个时候添加的是2边而不是1边,那应该有一个不一样的BST 故MST唯一的充要条件:如果MST唯一,那么运行到某步时,当某些权重相

叶鸿飞的博客 3182

Cesium创建无人机视锥,同步视锥与鹰眼地图视角,实现视锥键盘控制。解决视锥初始化位置不准确问题等

本文描述了一个基于Cesium的3D视锥体可视化系统开发过程。系统实现了主视图与鹰眼视图的双屏联动,支持通过键盘控制视锥体的空间移动(WASD前后左右,Q/E旋转,C/Z升降),并实时同步更新两个视图。关键技术包括:1)基于主视图Scene创建Camera实现视锥体精确绘制;2)通过PerspectiveFrustum设置视锥参数;3)建立双视图的相机位置及视角同步机制。目前暂未实现视锥体far/near边界在鹰眼视图中的可视化,该系统可应用于无人机视角监控等三维场景交互需求。

coder_bin的博客 1590

《网络安全自学教程》- OSI七层模型分层及作用,数据封装与解封过程,数据传输过程。

OSI分哪七层,每层的作用是什么,解释数据在七层模型中是怎样传输的,封包和解封过程,数据包在每一层是怎么封装和解封的。

wangyuxiang946的博客 1万+

PAT顶级 1016 Uniqueness of MST (35分)(最小生成树唯一性判断)

思路: 1.用并查集实现kruskalkruskalkruskal算法,最后查询一共有几个集合即可完成判断图是否联通以及计算不连通状况下有几块连通分量的工作; 2.根据kruskalkruskalkruskal算法的贪心思想,我们每次考虑未使用过的边里权值最小的那一条边,如果这条边两边的端点不属于同一集合,就合并它们。那这种思想里什么时候会出现不唯一性呢?即你当前遍历的这条边可以联通两个集合,我...

Yuhan的博客 1648

自然语言处理6 -- 情感分析

1 概述 情感分析是自然语言处理中常见的场景,比如淘宝商品评价,饿了么外卖评价等,对于指导产品更新迭代具有关键性作用。通过情感分析,可以挖掘产品在各个维度的优劣,从而明确如何改进产品。比如对外卖评价,可以分析菜品口味、送达时间、送餐态度、菜品丰富度等多个维度的用户情感指数,从而从各个维度上改进外卖服务。 情感分析可以采用基于情感词典的传统方法,也可以采用基于深度学习的方法,下面详细讲解 ...

谢杨易的博客 5万+

PAT顶级(MST个数)——1016 Uniqueness of MST (35 分)

1016 Uniqueness of MST (35 分) 解题思路: 本题重点在于如何判断最小生成数是否唯一,可以先随便生成一个最小生成树,这时候n个点是由n-1条边连起来的(如果不连通的情况判断一下直接输出),那如果这时候我们枚举所有未使用过的边(在生成树的过程中进行标记),将这条边加进原来的最小生成树中,必然会形成一个环,这时候我们就要断开一条边,使得环断开,那么我们可以发现如果这个环里面有任一条边的权值=我们新加的那条边的权值,那就说明这时候断开两条边的任一条边都能够重新组成最小生成树(显然环中的

ylwhxht的博客 770

Python 实战:全面解析“微信搜一搜”内容爬取,从入门到企业级架构

本文将带你从零搭建爬虫项目,采用 Requests、Scrapy、Selenium、Proxy 池、中间人监控(如 Fiddler/mitmproxy)、分布式调度、数据库持久化、断点续抓等方案,实现可持续、抗封能力强的内容抓取系统。理解“微信搜一搜”页面结构与 Javascript 渲染逻辑;使用 Scrapy 框架搭建分布式爬虫;使用 Selenium 模拟浏览器抓取;构建代理池提升爬取成功率;对抗验证码、IP 封禁与 cookie 过期问题;

2201_76125261的博客 1393

在Simulink中构建永磁同步电机的网络化控制模型,并分析通信网络对系统性能的影响

核心优势通过仿真验证了网络延迟和丢包对PMSM控制性能的影响。提供了改进PI参数或引入自适应控制的解决方案。扩展方向抗干扰控制:结合卡尔曼滤波或滑模控制抑制网络噪声。时间敏感网络(TSN)建模:参考知识库[2]的中断触发方式,实现确定性通信。网络安全仿真:模拟恶意攻击(如数据篡改)对控制系统的威胁。

xiaoheshang_123的博客 167

PAT顶级 1016 Uniqueness of MST (35分)(判断最小生成树是否唯一)

添加链接描述 Given any weighted undirected graph, there exists at least one minimum spanning tree (MST) if the graph is connected. Sometimes the MST may not be unique though. Here you are supposed to calculate the minimum total weight of the MST, and also tell i

qq_42479630的博客 2258

4-都2026年了,嵌入式发展前景怎么样,还适合入行吗?

本文系统分析了嵌入式行业的发展前景,指出到2026年嵌入式将迎来由"万物智联"驱动的黄金周期。文章回顾了嵌入式技术的四个演进阶段,从专用计算机到AIoT时代,强调其技术积累的延续性。作者从人才流向、产业智能化转型、高校新增专业等角度论证嵌入式行业的蓬勃发展,并提出"铁三角"模型分析其驱动力和护城河。最后给出职业发展路径建议,认为嵌入式适合长期主义者,在智能汽车、边缘计算等领域有广阔前景。文章建议读者抓住产业升级机遇,选择这一稳定且有复利效应的技术赛道。

指尖动听知识库 389

1016 Uniqueness of MST (35 分)(C++)

PAT顶级题解目录​​​​​​​ Given any weighted undirected graph, there exists at least one minimum spanning tree (MST) if the graph is connected. Sometimes the MST may not be unique though. Here you are suppose...

qq_41562704的博客 3072

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

FDS-HW10 Uniqueness of MST

FDS-HW10 7-2 Uniqueness of MST

Torrents的博客 934

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

pat顶级1016 Uniqueness of MST (35 point(s))

欢迎访问我的pat顶级题解目录哦 https://blog.youkuaiyun.com/richenyunqi/article/details/86751676 题目描述 算法设计 这是一道判断是否存在最小生成树,以及如果存在最小生成树是否唯一的题目,可以用Kruskal算法来解决。这里有两个问题需要进行判断: 是否存在最小生成树?如果不存在,则图中有几个连通块? 这一点可以通过Kruskal算法最终得...

日沉云起的博客 880

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

1016. Uniqueness of MST (35)解题报告

枚举、Kruskal最小生成树算法

信道者 2101

PAT | T1016 Uniqueness of MST

测试点3答案错误,31分 #include <iostream> #include <vector> #include <algorithm> #include <unordered_set> using namespace std; const int maxn = 510; typedef long long ll; struct Edge...

yehonglin29的博客 583

PAT (Top Level) Practise 1016 Uniqueness of MST (35)

1016. Uniqueness of MST (35) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue Given any weighted undirected graph, ther

Occult 1134

pat-top 1016. Uniqueness of MST (35)

https://www.patest.cn/contests/pat-t-practise/1016 照抄了 http://blog.youkuaiyun.com/jtjy568805874/article/details/60338730 确定是否唯一是难点,在每新加一个边时,先看同等权值的边可否加入,并对所有可加入的边进行计数,最后如果边数小于n,不小于则最小生成树不唯一。 #inc

guojiaqi007的专栏 772

进阶实验6-3.6 最小生成树的唯一性 (35 分)||1016 Uniqueness of MST (35 分)

陈姥姥数据结构学习与实验指导的图章节的最后一个题,我以为日常想想就可以写了,结果想了很久都没想到,然后百度了一下,居然发现有一篇校友的论文完美的解决了这个题,我就复现了论文里的方法。(ps:最小生成树是否唯一 吴宇亮,孔凡龙) 我用的是以kruskal算法为基础,也就是论文里的第二个方法。 思路:kruskal算法每次都是加入权值最小的边,但是要保证加入的边的两个端点在不同的集合里。关键点是:...

华师少女的梦的博客 2000

【次小生成树】PAT (Top Level) 1016 Uniqueness of MST (35)

Think: 1知识点:次小生成树 2题意: (1):若最小生成树存在且唯一,第一行输出最小生成树权值和,第二行输出Yes (2):若最小生成树存在且不唯一,第一行输出最小生成树权值和,第二行输出No (3):若最小生成树不存在即图不连通,第一行输出”No MST”,第二行输出连通块数量PAT题集-题目链接以下为Accepted代码#include <cstdio> #include <c

BlessingXRY的博客 565

PAT TOP 1016. Uniqueness of MST (35)

问题描述:1016. Uniqueness of MST (35)时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, YueGiven any weighted undirected graph, there exists at least one minimum spanning tree (MST) if the graph is con...

kircher的博客 779

【判断MST的唯一性】POJ 1679 The Unique MST

POJ 1679 The Unique MST 这道题非常非常非常非常非常的坑 不管怎么样吧,过了n久终于过了,而且还很迷。 说说AC思路: 我们将每条边的序号记录在id里 第一次,我们将边权升序,id降序,找到MST,记录MST所用的边的序号 第二次,我们将边权升序,id升序,找到MST,记录MST所用的边的序号 如果两次mst的结果不同,说明没有MST唯一 如果相同,那么我们将两次找到的MS...

L_X_ 797

MST唯一性判断

fzu2087 统计树边 解法(mengxiang000000 ) 如果安全,则先不Union,先统计最小生成树的边数,待统计完后再Union; poj1679 与此题类似 fzu2087 #include #include using namespace std; const int maxn=100005; typedef struct node{ int st,ed,cos

2688

关于强连通图和欧拉图的一些粗浅理解

由于上一道题涉及了环,所以我当时就在纠结一个问题,强连通图是否一定可以是环形的?(就是说强连通图是否一定是欧拉图?= 是否一定有欧拉回路?= 是否一定有一笔画的环形路线?) 现在,我给出答案,不一定。下面所说的欧拉路径不包含欧拉回路。 下面几点都是关于有向图。 强连通图不一定是欧拉图。反例如下:(但是这个强连通图有欧拉路径) 连通的欧拉图一定是强连通图。(想想孤立点?2333) 一个有向图是欧...

Crossing over 6415
上一篇: 关于判定4种无向图的一些想法
下一篇: CCF CSP 201312 4.有趣的数
Crossing over
博客等级 码龄10年 6粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值