当前位置: 首页 > news >正文

无向图DFS、BFS生成树,ABC251F

目录

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解


一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

https://atcoder.jp/contests/abc251/tasks/abc251_f


二、解题报告

1、思路分析

这题就是DFS、BFS生成树的裸题

对于无向图:

1、DFS生成树会囊括所有的横叉边

2、BFS生成树会囊括所有的返祖边

这两个性质均可以通过反证法证明:

1、假设存在 横叉边<u, v> (dfn[u] < dfn[v])不在DFS生成树上,那么说明搜索到 u 的时候 v已经被搜了,这与 dfn[u] < dfn[v] 矛盾,故原命题成立

2、假设存在 返祖边<u, v> (dep[u] > dep[v] + 1)不在DFS生成树上,那么说明搜索到 u 的时候 v已经被搜了,这与 dep[u] > dep[v] + 1 矛盾,故原命题成立

所以对于两种要求的生成树分别dfs和bfs即可

2、复杂度

时间复杂度: O(N)空间复杂度:O(N)

3、代码详解

#include <bits/stdc++.h> namespace ranges = std::ranges; namespace views = std::views; using i64 = long long; using u32 = unsigned; using u64 = unsigned long long; int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int N, M; std::cin >> N >> M; std::vector<std::vector<int>> adj(N); for (int i = 0; i < M; ++i) { int u, v; std::cin >> u >> v; --u; --v; adj[u].push_back(v); adj[v].push_back(u); } std::vector<std::array<int, 2>> ans; std::vector<bool> vis(N); [&](this auto &&self, int u) -> void { vis[u] = true; for (int v : adj[u]) { if (vis[v]) { continue; } ans.push_back(std::array<int, 2>{u, v}); self(v); } }(0); for (auto &[u, v] : ans) { std::cout << u + 1 << ' ' << v + 1 << '\n'; } assert(ans.size() + 1 == N); std::queue<int> q; ans.clear(); q.push(0); vis[0] = false; while (!q.empty()) { int u = q.front(); q.pop(); for (int v : adj[u]) { if (vis[v]) { ans.push_back(std::array<int, 2>{u, v}); vis[v] = false; q.push(v); } } } assert(ans.size() + 1 == N); for (auto &[u, v] : ans) { std::cout << u + 1 << ' ' << v + 1 << '\n'; } return 0; }
http://www.jsqmd.com/news/475575/

相关文章:

  • 资深测试老鸟,一篇讲清楚性能测试是什么,一文上高速...
  • 三相交流220V电压源经AC-DC-DC变换用于电镀电源
  • 横波直探头接收信号示意图](placeholder_waveform.png
  • Turnitin AI检测和知网AIGC检测有什么不同?留学生必看
  • WorkBuddy,是腾讯最近推出的一款 AI 桌面智能体
  • 七部门重磅发布AI安全治理三年行动计划!全行业合规边界划定,这些要求直接影响每一家AI企业
  • 基于用户行为的动态标签与SOP触发引擎
  • 2026首版次高端软件申报全流程指南:中承信安权威解析
  • AutoML 的自动化边界问题
  • docker部署New-API
  • Ozon卖家必看:26年三大选品工具格局解析,谁能成为赛道效率之王
  • Java程序冷启动时CPU优化实践
  • 什么?你的C盘满了?看我怎么帮你空出100G!
  • 一天生成100条带货视频,ai短视频新生产力工具——LinkPix
  • 【Public Key Retrievalis not allowed】com.mysql.cj.exceptions.UnableToConnectException
  • C-NCAP2024 AEB VRU测试全解析
  • 白色情人节
  • 计算机毕设指南详解
  • Docker 进阶(二)Swarm
  • actxprxy.dll文件彻底修复方法 附免费的下载解决办法
  • 从零掌握 Spring AI Alibaba Skill:定义、注册与渐进式披露
  • 34岁大厂程序员被裁当场痛哭:月供2.6万!43岁被裁、赔偿金只够撑半年!
  • 小白努力学习技术,从1级升级开始 目前等级:14级(0/10)
  • FR相对层次坐标与绝对层次坐标的区别
  • RGB显示驱动MCU单片机—CH643键盘应用方案
  • 从事ar装配行业的公司有哪些
  • 〘 6-2 〙软考高项 | 第13章:项目资源管理(下)
  • Comsol 中的空气棒板电晕放电等离子体仿真:电场强度那些事儿
  • 给大家普及一下,学大模型最快的邪修路线!
  • Google官方介绍Android 16 新特性都有哪些