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

蓝桥杯 17.发现环

发现环

原题目链接

题目描述

小明的实验室有 N 台电脑,编号 1 ⋯ N

原本这 N 台电脑之间有 N−1 条数据链接相连,恰好构成一个树形网络
在树形网络上,任意两台电脑之间有唯一的路径相连。

不过在最近一次维护网络时,管理员误操作,使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路

环路上的电脑由于两两之间不再只有一条路径,使得这些电脑上的数据传输出现了 BUG。

为了恢复正常传输,小明需要找到所有在环路上的电脑。你能帮助他吗?


输入描述

  • 第一行包含一个整数 N,表示电脑数量。
  • 接下来的 N 行,每行包含两个整数 a, b,表示 ab 之间有一条数据链接相连。

数据范围

  • 1 ≤ N ≤ 10⁵
  • 1 ≤ a, b ≤ N

输入保证数据合法,即原本是一棵树,恰好多出一条边形成一个环。


输出描述

按从小到大的顺序输出所有在环路上的电脑的编号,用空格分隔。


输入样例

5
1 2
3 1
2 4
2 5
5 3

输出样例

1 2 3 5

c++代码

#include<bits/stdc++.h>
#include<stdio.h>using namespace std;int a, b, x;int main() {int N;scanf("%d", &N);vector<vector<int>> arr(N + 1);vector<int> d(N + 1, 0), ans;for (int i = 0; i < N; i++) {scanf("%d %d", &a, &b);arr[a].push_back(b), arr[b].push_back(a), d[a]++, d[b]++;}queue<int> qu;for (int i = 1; i <= N; i++) {if (d[i] == 1) qu.push(i);}while(!qu.empty()) {x = qu.front(), qu.pop(), d[x]--;for (int y : arr[x]) {d[y]--;if (d[y] == 1) qu.push(y);}}for (int i = 1; i <= N; i++) {if (d[i] > 1) ans.push_back(i);}sort(ans.begin(), ans.end());for (int i = 0; i < ans.size(); i++) {printf("%d", ans[i]);if (i != ans.size() - 1) printf(" ");}return 0;
}//by wqs

题目解析

判断一个图是否有环,依次删除度为 1 的点以及与其相连的边,这样可以把所有不成环的链上点依次删除,最后也无法被删除的点集就是题目要求的答案,按照编号从小到大输出即可。

具体步骤

1、统计所有点的入度;
2、创建一个队列维护所有入度为 1 的点,将所有度等于 1 的节点加入队列。(本题中没有独立的节点,所以不用考虑度为 0 的情况);
3、当队列不为空时,弹出队首元素,把与队首元素相邻的节点入度减 1,如果相邻节点度数变为 1,则将相邻节点加入队列;
4、循环结束后,从小到大判断每个结点的入度,若入度大于 1,则说明该节点在环内,输出该节点。

相关文章:

  • uniapp微信小程序:WIFI设备配网之TCP/UDP开发AP配网
  • mysql的binlog,redolog,undolog的区别
  • Linux下 REEF3D及DIVEMesh 源码编译安装及使用
  • 【JavaWeb后端开发03】MySQL入门
  • 无需接线!虚幻引擎变量跨次元绑定的无线电奥秘
  • 转化率提升47%?亚马逊用户行为预测模型深度解读
  • 数据结构中的各种排序
  • 量子计算在金融领域的应用与展望
  • DeepSeek智能时空数据分析(二):3秒对话式搞定“等时圈”绘制
  • iOS 中的虚拟内存 (理解为什么需要虚拟内存)
  • npm -v npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。来看看永久修改执行策略!
  • 【手机】vivo手机应用声音分离方案
  • 【Spring】深入解析 Spring AOP:切面优先级、切点表达式、自定义注解并实现、Spring AOP 的几种实现方式
  • Java 设计模式心法之第3篇 - 总纲:三大流派与导航地图
  • POSIX多线程,解锁高性能编程
  • 【iOS】Blocks学习
  • LangChain实现PDF中图表文本多模态数据向量化及RAG应用实战指南
  • 【身份证扫描件识别表格】如何识别大量身份证扫描件将内容导出保存到Excel表格,一次性处理多张身份证图片导出Excel表格,基于WPF和腾讯云的实现方案
  • Elasticsearch插件:IDEA中的Elasticsearch开发利器
  • LabVIEW 开发中数据滤波方式的选择
  • 视频·世界读书日|林乾:碎片化阅读或影视综艺≠知识
  • 印度空军计划增购40架法制“阵风”战机,此前已购买36架
  • 扫描类软件成泄密“推手”,网盘账号密码遭暴力破解
  • 4月LPR保持不变:1年期3.1%,5年期以上3.6%
  • 马拉松夺冠机器人将小批量量产:价格与一台入门级小轿车差不多
  • 聚餐醉酒后骑车撞树身亡、家属起诉共饮者赔44万,法院已判