【日常学习】【拓扑排序】家谱树&FZU1483 Sicily1424 奖金 题解

本文介绍了拓扑排序的概念及其在判断有向无环图中的应用,通过福州大学OJ和中山大学Sicily的题目为例,讲解如何使用拓扑排序解决家谱树的辈分排列问题。同时,探讨了处理有环情况下的奖金问题,提出分层处理的方法,并分享了相关学习资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

拓扑排序的定义 简单来说就是给你一个图写出一个序列 图中如果a通向b 那么序列中A必须排在B前面

拓扑排序可能有很多结果 必须是有向无环图 可以利用拓扑排序来判定环的存在 当然也可以用神奇的SPFA 但是拓扑排序时间复杂度很低 只有O(V+E)

基本实现思路是 每次取出入度为0的点 然后删除与它相连的边 直到没有边  如果还有边但是找不到入度为0的点 说明有环

学习这个算法联系了两道题目 很经典很单纯 但是一般没有OJ有评测 奖金这道题目在福州大学OJ和中山大学萌萌哒Sicily上找到了评测(为什么要叫西西里呢?)


先放题目:

家谱树

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


【输入】
第一行一个整数(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



这道题目显然只需要一次拓扑排序 输出任意一个序列就可以了 不要求输出结果而是序列 因此要在过程中数组保存出队的元素 另外这道题目没有环

放代码:

普通循环的代码 

//一本通 拓扑排序练习 家谱树
//拓扑一次 输出路径 不判环 
//copyright by ametake
#include
  
   
#include
   
    
usin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值