F. Microcycle(dfs 搜寻路径 + 并查集)

解析:

本题的意思是,求一个环的最小的那条边。

并且输出其这个环的点。

我们可以利用并查集,进行确定其是否有环路。在将所用的边从大到小排序。

利用 vector容器,pop_back() 和 push的特性。

起点为 u终点为 v寻找路径。

代码:

#include<bits/stdc++.h>
using namespace std;
#define PII pair<int,int>
const int N = 2e5 + 10;
struct edge {int u, v, w;} e[N]; //存输入的所有边
vector<PII> graph[N];  //邻接表存图,first存通往的点, second存边权
int n, m, U, V, W, fa[N], vis[N];
vector<int> path; //存遍历顺序
bool cmp(edge a, edge b) 
{
	return a.w > b.w;
}
int find(int x) 
{	
	return fa[x] == x ? x : fa[x] = find(fa[x]);
} //并查集查询
void merge(int x, int y) 
{
	fa[find(x)] = find(y);
}  //并查集合并
bool dfs(int now){
    if(now == V){
        return true; //找到答案,直接回溯
    }
    for(auto it: graph[now]){
        if(it.second < W || vis[it.first])  continue;
        vis[it.first] = true;  //标记此点已走过
        path.push_back(it.first);
        if(dfs(it.first))  return true;
        path.pop_back();
    }
    return false;
}
void solve(){
    cin >> n >> m;
    for(int i = 1; i <= n; i ++) fa[i] = i, graph[i].clear(), vis[i] = false;  //初始化
    for(int i = 1; i <= m; i ++) cin >> e[i].u >> e[i].v >> e[i].w; // 输入每一条边 
    path.clear();  
    
    sort(e + 1, e + 1 + m, cmp);  //按边权从大到小排序
    for(int i = 1; i <= m; i ++){
        int u = e[i].u, v = e[i].v, w = e[i].w;
        graph[u].push_back({v, w}), graph[v].push_back({u, w});
        if(find(u) == find(v)){  //加入这条边之后会产生新的环
            U = u, V = v, W = w;  //此时w为最小边
        }else{
            merge(u, v); 
        }
    }
    path.push_back(U);
    vis[U] = true;
    dfs(U);
    cout << W << " " << path.size() << "\n";
    for(auto it: path) {cout << it << " ";}
    cout << "\n";
}
int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int t;
	cin >> t;
	while(t--)
	{
		solve();
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/479122.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

P2789 直线交点数题解

题目 假设平面上有N条直线&#xff0c;且无三线共点&#xff0c;那么这些直线一共能有多少不同的交点数&#xff1f; 输入输出格式 输入格式 一行&#xff0c;一个整数N&#xff0c;代表有N条直线。 输出格式 一行&#xff0c;一个整数&#xff0c;表示方案总数。 输入输…

金融知识分享系列之:出场信号RSI指标

金融知识分享系列之&#xff1a;出场信号RSI指标 一、出场信号RSI指标二、RSI指标原理三、 指标用法四、RSI指标总结 一、出场信号RSI指标 名称&#xff1a;相对强弱指标参数&#xff1a;(默认14)组成&#xff1a;RSI线以及30轴、50轴、70轴构成 0-30是极弱&#xff1a;0-30的…

天天爱掼蛋规则

一、牌型 1、单张&#xff1a;任意一张单牌&#xff1b; 2、对子&#xff1a;任意两张点数相同的牌&#xff0c;如33、44&#xff1b; 3、三同张&#xff1a;三张牌点相同的牌型&#xff0c;如555&#xff1b; 4、三同连张&#xff08;也叫钢板&#xff09;&#xff1a;两组…

蓝桥杯单片机快速开发笔记——特训2 按键的长按与短按

一、题目要求 在CT107D单片机综合训练平台上&#xff0c;通过I/O模式编写代码&#xff0c;实现以下功能&#xff1a; 系统上电后&#xff0c;关闭蜂鸣器、继电器和全部指示灯&#xff0c;数码管显示初始值为28&#xff0c;仅显示数码管最右边两位。利用定时器0实现10ms间隔定…

分享基于PDF.js的pdf阅读器代码

一、前言 有时候开发PC端web页面的时候会遇到PDF预览、下载等功能&#xff0c;为了兼容浏览器&#xff0c;需要找一款前端插件进行开发。比较好的PDF插件&#xff0c;就是mozilla的pdf.js&#xff08;注意是mozilla&#xff0c;如果你百度遇到需要收费的&#xff0c;那应该是下…

使用clion开发tftlcd屏,移植驱动时遇到的问题记录

问题现象 屏幕只有一半屏在刷新 问题出现的情况(在CLION开发时遇到过) 总结

构造函数和析构函数两兄弟的作用是什么

[TOP] &#xff08;1&#xff09;构造函数 1.1 概念 对于以下Date类&#xff1a; class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout << _year << "-" << _month << …

【综述】二维半导体和晶体管在集成电路未来应用

一篇关于二维半导体和晶体管在集成电路未来应用的综述文章。 文章由Lei Yin、Ruiqing Cheng、Jiahui Ding、Jian Jiang、Yutang Hou、Xiaoqiang Feng、Yao Wen和Jun He*共同撰写&#xff0c;发表在《ACS Nano》2024年第18卷上。 Figure 1: CMOS晶体管的演变 描述了CMOS晶体管…

Mysql数据库事务

目录 一、Mysql数据库事务的概念 1.事务的定义 2.事务的特点 2.1原子性 2.2一致性 2.3隔离性 2.4持久性 3.事务之间的相互影响 3.1脏读 3.2不可重复读 3.3幻读 3.4丢失更新 4.如何解决事务的干扰 4.1read uncommitted——读取尚未提交的数据 4.2read committed—…

ros time 时间戳改为机器开机时间

一、问题描述 因项目需要,需要"ros::Time::now()" 改成获取机器开机时间,此处针对rospy的机器时间修改。 二、修改方法 修改ros源码的文件 /opt/ros/noetic/lib/python3/dist-packages/rospy/rostime.py 修改如下: 定位到 get_rostime() &#xff0c;并将 float_…

面试笔记——MySQL(事务:事务特性、并发事务、事务隔离、Redo Log与Undo Log、MVCC)

事务 概念与特性 事务&#xff08;Transaction&#xff09;指的是一组数据库操作&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部不执行&#xff0c;保证了数据库的一致性和完整性&#xff0c;它使得数据库操作可以按照逻辑上的单元进行组织和执行&#xff0c;提高…

视频号小店入口在哪?怎么运营?全流程分享!

我是电商珠珠 视频号小店是视频号在22年7月宣布的电商平台&#xff0c;是供商家做店所使用。到现在也发展了不过一年的时间&#xff0c;所以有很多商家都想要往这个平台上转&#xff0c;其中包括新手。因为这个平台属于初期&#xff0c;所以红利比较大&#xff0c;规则限制没有…

CDMP认证是一个什么样的证书?有必要参加CDMP培训吗?通过率高不高?

在当前数字化时代&#xff0c;数据管理变得愈发重要。为了满足社会对数据管理人才的紧迫需求&#xff0c;DAMA国际于2004年推出了CDMP数据管理专业认证。这是一项综合资格认证&#xff0c;涵盖学历教育、工作经验和专业知识考试。CDMP认证是全球唯一的数据管理方面权威性认证&a…

[Rust] 使用vscode实现HelloWorld程序并进行debug

一、简介 本文介绍了如何使用vscode编写rust&#xff0c;实现打印"Hello, world!"的程序。 二、工具安装 0. 环境介绍&#xff1a; Linux &#xff08;或者windowswsl&#xff09; 1. 安装rust编译器rustc和包管理器cargo。 请参考连接&#xff1a;Rust 程序设…

wy的leetcode刷题记录_Day92

wy的leetcode刷题记录_Day92 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2024-3-22 前言 目录 wy的leetcode刷题记录_Day92声明前言2617. 网格图中最少访问的格子数题目介绍思路代码收获 695. 岛屿的最大面积题目介绍思路代码收获 2…

java网络原理(二)------TCP确认应答和超时重传

一Tcp协议 TCP&#xff0c;即Transmission Control Protocol&#xff0c;传输控制协议。人如其名&#xff0c;要对数据的传输进行一个详细的控制。 二.TCP协议段格式 知道了端口号才能进一步确认这个数据报交给了哪一个程序。16为端口号是2字节&#xff0c;范围是0到65535.如…

牛,The O-one ——通过语音交互控制电脑的开源语言模型

模型介绍 The O-one &#xff1a;一个创新的开源语言模型计算机 可以让你通过语音交互来和你的计算机进行对话&#xff0c;完成询问、指令下达等任务。灵感居然来自Andrej Karpathy 的 LLM 操作系统。O1运行一个代码解释语言模型&#xff0c;并在计算机内核发生特定事件时调用…

音视频开发_FFmpeg基石精讲

FFmpeg 框架 核心组件 libavcodec&#xff1a;一个编解码库&#xff0c;包含了众多的编码器和解码器用于编码和解码音视频流。libavformat&#xff1a;一个封装格式库&#xff0c;用于处理各种音视频封装格式。libavutil&#xff1a;一个工具库&#xff0c;提供了常见功能的简…

交互式QGraphicsView(平移/缩放/旋转)

一 简述 Graphics View提供了一个平台&#xff0c;用于大量自定义 2D 图元的管理与交互&#xff0c;框架包括一个事件传播架构&#xff0c;支持场景 Scene 中的图元 Item 进行精确的双精度交互功能。Item 可以处理键盘事件、鼠标按下、移动、释放和双击事件&#xff0c;同时也…

SAP-MM-设置字段默认值

当我们创建订单时&#xff0c;有些字段总是重复输入&#xff0c;每次值也是固定的&#xff0c;例如生产订单 如上图“生产工厂都是1000”如何设置成默认每次进入都是1000呢&#xff1f; 点击字段&#xff0c;F1 查看参数ID“WRK” 输入tcode&#xff1a;SU3 按上图维护数据100…