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

洛谷 B3644:【模板】拓扑排序 / 家谱树 ← 邻接表

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

【题目描述】
有个人的家族很大,辈分关系很混乱,请你帮整理一下这种关系。给出每个人的后代的信息。输出一个序列,使得每个人的后辈都比那个人后列出。

【输入格式】
第 1 行一个整数 N(1≤N≤100),表示家族的人数。接下来 N 行,第 i 行描述第 i 个人的所有后代编号。
每行最后是 0 表示描述完毕

【输出格式】
输出一个序列,使得每个人的后辈都比那个人后列出。如果有多种不同的序列,输出任意一种即可。

【输入样例】
5
0
4 5 1 0
1 0
5 3 0
3 0

【输出样例】
2 4 5 3 1

【算法分析】
● 拓扑排序算法概念
拓扑排序‌是针对‌有向无环图(DAG, Directed Acyclic Graph)‌的一种线性排序算法,使得对于图中的每一条有向边 (u, v),u 在排序中总是位于 v 的前面。
有向图的拓扑序列详见:https://blog.csdn.net/hnjzsyjyj/article/details/116307687

● 拓扑排序算法步骤
(1)从有向图中选择一个无前驱(即入度为0)的顶点并且输出它。
(2)从图中删除该顶点及所有以它为尾的有向边。
(3)重复上述两步,直至不存在无前驱的顶点。
(4)若此时输出的顶点数小于有向图中的顶点数,则说明有向图中存在环,否则输出的顶点序列就是一个拓扑序列。

【算法代码】

#include <bits/stdc++.h>
using namespace std;const int maxn=1e3+5;
int ind[maxn]; //inDegree
vector<int> g[maxn];
int n,x;void topsort() {queue<int> q;for(int i=1; i<=n; i++) {if(ind[i]==0) q.push(i);}while(!q.empty()) {int t=q.front();q.pop();cout<<t<<" ";for(int i=0; i<g[t].size(); i++) {int j=g[t][i];ind[j]--;if(ind[j]==0) q.push(j);}}
}int main() {cin>>n;for(int i=1; i<=n; i++) {while(cin>>x && x) {g[i].push_back(x);ind[x]++;}}topsort();return 0;
}/*
in:
5
0
4 5 1 0
1 0
5 3 0
3 0out:
2 4 5 3 1
*/




【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/116307687
https://www.cnblogs.com/jyssh/p/18829420
https://www.luogu.com.cn/problem/solution/B3644
https://www.acwing.com/problem/content/3707/
https://www.lanqiao.cn/problems/108/learning/

 

http://www.xdnf.cn/news/209845.html

相关文章:

  • linux修改环境变量
  • JMM中的内存屏障
  • 【电子战数字孪生系统】新一代雷达目标与干扰模拟器技术白皮书
  • 数字中国浪潮下:Coremail AI赋能邮件办公,筑牢安全防线引领转型
  • Dia-1.6B 在 Windows 系统下的成功部署及多人情景对话克隆实践
  • SSR vs SSG:前端渲染模式终极对决(附 Next.js/Nuxt.js 实战案例)
  • Java中的接口和抽象类
  • JSON-RPC 2.0 规范中文版——无状态轻量级远程过程调用协议
  • 无锡哲讯科技:引领企业数字化转型的SAP实施专家
  • 基于论文的大模型应用:基于SmartETL的arXiv论文数据接入与预处理(四)
  • 基于 Windows I/O 完成端口(IOCP)的多线程任务队列系统小case
  • 关于插值和拟合(数学建模实验课)
  • 在 VMware 虚拟机中安装 Windows7
  • 【Redis】缓存|缓存的更新策略|内存淘汰策略|缓存预热、缓存穿透、缓存雪崩和缓存击穿
  • 系统的环境变量
  • 编程中如何与AI交互-结构化输入和理解确认机制
  • 【dify—3】拉取镜像、本地访问dify
  • 如何搭建spark yarn 模式的集群集群
  • 第1阶段-前5天-考试题及答案
  • (开源)视频画面增强模型:Ev-DeblurVSR (可以解决视频画面不清晰的问题)
  • C++算法(17):reverse函数用法详解,头文件<algorithm>与实战示例
  • CSS的三大特性:层叠、继承与优先级
  • UI-TARS论文解读 并提供镜像
  • 深入理解Spring AI框架的核心概念
  • HarmonyOS ArkUI交互事件与手势处理全解析:从基础到高级实践
  • 阿里Qwen3 8款模型全面开源,免费商用,成本仅为 DeepSeek-R1 的三分之一
  • 深入理解 Linux 权限管理:从基础到进阶
  • Agent开源工具:mcp快速接入,mcp-use上手指南
  • 23G显存可以跑多大尺寸的Qwen3?
  • 第十六届蓝桥杯 2025 C/C++组 旗帜