news 2026/10/11 1:51:18

洛谷 P5318:查找文献 ← DFS BFS

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
洛谷 P5318:查找文献 ← DFS BFS

【题目来源】
https://www.luogu.com.cn/problem/P5318

【题目描述】
小 K 喜欢翻看洛谷博客获取知识。每篇文章可能会有若干个(也有可能没有)参考文献的链接指向别的博客文章。小 K 求知欲旺盛,如果他看了某篇文章,那么他一定会去看这篇文章的参考文献(如果他之前已经看过这篇参考文献的话就不用再看它了)。
假设洛谷博客里面一共有 n(1≤n≤10^5) 篇文章(编号为 1 到 n)以及 m(1≤m≤10^6) 条参考文献引用关系。目前小 K 已经打开了编号为 1 的一篇文章,请帮助小 K 设计一种方法,使小 K 可以不重复、不遗漏的看完所有他能看到的文章。
这边是已经整理好的参考文献关系图,其中,文献 X→Y 表示文章 X 有参考文献 Y。不保证编号为 1 的文章没有被其他文章引用。

请对这个图分别进行 DFS 和 BFS,并输出遍历结果。如果有很多篇文章可以参阅,请先看编号较小的那篇(因此你可能需要先排序)。

【输入格式】
共 m+1 行,第 1 行为 2 个数,n 和 m,分别表示一共有 n(1≤n≤10^5) 篇文章(编号为 1 到 n)以及 m(1≤m≤10^6) 条参考文献引用关系。
接下来 m 行,每行有两个整数 X,Y 表示文章 X 有参考文献 Y。

【输出格式】
共 2 行。
第一行为 DFS 遍历结果,第二行为 BFS 遍历结果。​​​​​​​

【输入样例】
8 9
1 2
1 3
1 4
2 5
2 6
3 7
4 7
4 8
7 8​​​​​​​

【输出样例】
1 2 5 6 3 7 8 4
1 2 3 4 5 6 7 8

【数据范围】
1≤n≤10^5​​​​​​​,1≤m≤10^6

【算法分析】
必须注意的坑点:
(1)必须 sort 邻接表:题目要求优先访问小编号节点,不加排序直接 WA。
(2)大数据量一定要写 ios::sync_with_stdio(0); cin.tie(0);,否则 TLE。
(3)DFS 和 BFS 之间要重置 st 数组。
(4)图是有向图 X→Y,只加单向边,不要加反向边!


【算法代码】

#include <bits/stdc++.h> using namespace std; const int N=1e5+5; vector<int> g[N]; bool st[N]; vector<int> dfs_ans,bfs_ans; void dfs(int u) { st[u]=true; dfs_ans.push_back(u); for(int j:g[u]) { if(!st[j]) dfs(j); } } void bfs(int u) { queue<int> q; q.push(u); st[u]=true; while(!q.empty()) { int t=q.front(); q.pop(); bfs_ans.push_back(t); for(int j:g[t]) { if(!st[j]) { st[j]=true; q.push(j); } } } } int main() { int n,m; cin>>n>>m; for(int i=1; i<=m; i++) { int x, y; cin>>x>>y; g[x].push_back(y); } for(int i=1; i<=n; i++) { sort(g[i].begin(),g[i].end()); } memset(st,false,sizeof st); dfs(1); memset(st,false,sizeof st); bfs(1); for(int i=0; i<dfs_ans.size(); i++) { if(i>0) cout<<" "; cout<<dfs_ans[i]; } cout<<endl; for(int i=0; i<bfs_ans.size(); i++) { if(i>0) cout<<" "; cout<<bfs_ans[i]; } cout<<endl; return 0; } /* in: 8 9 1 2 1 3 1 4 2 5 2 6 3 7 4 7 4 8 7 8 out: 1 2 5 6 3 7 8 4 1 2 3 4 5 6 7 8 */



【参考文献】
https://www.luogu.com.cn/problem/solution/P5318

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 1:49:12

89页航天智能制造规划方案,如何快速拆解判断落地性?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/11 1:49:06

DRPE图像加密:傅立叶变换与相位掩膜的Matlab实现

如果你最近正在为课程设计、本科毕设或者考研复试找方向&#xff0c;大概率刷到过“基于傅立叶变换和相位掩膜的图像加密”这个关键词。这套方法在学术上有更经典的名字——双随机相位编码&#xff08;Double Random Phase Encoding&#xff0c;DRPE&#xff09;&#xff0c;19…

作者头像 李华
网站建设 2026/10/11 1:48:54

Lasso分位数回归的Matlab实现:稳健变量选择与区间预测实战

我先把这套方案最值得说的点放到前面&#xff1a;Lasso分位数回归&#xff0c;核心就是在一句话里同时干了三件事——变量选择、稳健回归、区间预测。很多做数据预测的朋友习惯只输出一个点估计&#xff0c;但是业务方真正问的是“这个东西大概会落在哪个区间”。用残差方差的近…

作者头像 李华
网站建设 2026/10/11 1:48:33

云上OpenClaw蜜罐新玩法:2H4G服务器极速部署TaoToken实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/11 1:48:29

信息科学与工程学】【通信工程】第二百三十九篇 超大规模企业组网设计 第二章节 02.1 全球骨干设计07 算力网络04

四个模块全部按生产可直接落地标准写。Flink CEP 在之前风控统计检测基础上升级为模式序列匹配;Redis 多级缓存在之前 Cluster 双活基础上增加本地缓存层一致性协议;Tokenizer 联邦学习在之前量化推理基础上增加多 DC 协同训练;计费跨链结算是全新模块。 一、Flink CEP 复杂…

作者头像 李华