题目描述

火星人的血缘系统已经够混乱了。实际上,火星人会在他们想要的时间和地点发芽。他们聚集在不同的群体中,所以一个火星人可以有一个父母也可以有十个。没有人会对一百个孩子感到惊讶。火星人已经习惯了这一点,他们的生活方式在他们看来很自然。
在行星委员会中,混乱的系谱系统导致了一些尴尬。在那里会见最有价值的火星人,因此为了在所有讨论中不冒犯任何人,它首先被用来让年长的火星人发言,而不是年轻的火星人,仅是最年轻的没有孩子的评估员。不过,维持这个秩序还真不是一件小事。 Martian 并不总是认识他所有的父母(而且他的祖父母没有什么可说的!)。但是,如果错误地先说一个孙子,而只说他年轻的曾祖父,这就是真正的丑闻。
您的任务是编写一个程序,该程序将一劳永逸地定义一个顺序,以保证理事会的每个成员都比其后代更早发言。

输入

标准输入的第一行只包含一个数字 N, 1 <= N <= 100 — 火星行星委员会成员的数量。根据数百年的传统,理事会成员是用从 1 到 N 的自然数来枚举的。此外,正好有 N 行,而且,第 I 行包含了第 I 名成员的孩子的列表。子项列表是由空格分隔的任意顺序的子项序列号序列。子项列表可能为空。该列表(即使它是空的)以 0 结尾。

输出

标准输出应该在其唯一的一行中包含一个由空格分隔的说话者号码序列。如果有几个序列满足问题的条件,则将其中的任何一个写入标准输出。至少一个这样的序列总是存在。

输入样例:

5
0
4 5 1 0
1 0
5 3 0
3 0

输出样例:

2 4 5 3 1

题目含义:在说话时,长辈必须要比晚辈先说.输入的N行中,第i行是该行的孩子列表(u1,u2…),相当于有一条i - > u的边(在拓扑序列中->表示,方向与顺序表示前面的序号排在后面之前).题目的意思是求拓扑序列,并且该序列还是一直存在的.

关于拓扑序列的思路:

  1. 想让入度为0的点入栈.
  2. 依次从栈中弹出节点,删除该点的所有边(也就是出度边,对应着操作就是所有邻接点的入度-1).如果该点的临界点入度-1之后的入度为0,则进栈.
  3. 持续进行2操作,直至栈为空为止.

AC代码

#include<iostream>
#include<stack>
using namespace std;
const int maxn = 110;
int map[maxn][maxn],indegree[maxn],topo[maxn],n;
stack<int> s;
void TopoSort() {int cnt = 0;for(int i = 1; i <= n; i++) {if(!indegree[i]) {s.push(i);}}while(!s.empty()) {int u = s.top();s.pop();topo[cnt++] = u;//将入度为0的点加入topo序列.for(int i = 1; i <= n; i++) { //让u的所有临界点,入度-1if(map[u][i]) {indegree[i]--;if(!indegree[i]) { //如果入度为0则入栈. s.push(i);}}
//          if(!indegree[i]){//如果入度为0则入栈. 这个if条件一定要写在上面 ,只有是u的临界点了才进行入度-1并 进行判断入度是否为0.
//              s.push(i);
//          }}}}
int main() {cin>>n;int v;for(int i = 1; i <= n; i++) {while(cin>>v&&v) {map[i][v] = 1;indegree[v]++;}}TopoSort();for(int i = 0; i < n-1; i++) {cout<<topo[i]<<" ";}cout<<topo[n-1]<<endl;return 0;
}

POJ2367 家谱树相关推荐

  1. php递归面包屑,php可应用于面包屑导航的递归寻找家谱树实现方法

    本文实例讲述了php可应用于面包屑导航的递归寻找家谱树实现方法.分享给大家供大家参考.具体实现方法如下:<?phpecho " ";$area = array(array(& ...

  2. Php数组面包屑导航,php可应用于面包屑导航的迭代寻找家谱树实现方法

    php是通过定义类来实现迭代器接口来构造迭代器,通过yield构造迭代器可以提高性能并节省系统开销,下面就跟着爱站技术频道小编的步伐来学习php可应用于面包屑导航的迭代寻找家谱树实现方法吧. 具体实现 ...

  3. java家谱树_青锋家谱系统-基于springboot+orgtree的青锋家谱树管理系统

    gen 青锋家谱系统:基于springboot架构的家谱项目系统 项目介绍 基于springboot.orgtree的家谱树管理系统,将纸质版的家谱进行电子化.信息化,建立家族的家谱血脉联系. [青锋 ...

  4. 家谱树 (并查集拓扑排序)

    目录 拓扑排序 Kahn. 最后附上Kahn的代码: 链式前向星做法: 其次是我用Kahn做的家谱树的代码(矩阵): 其次是我用Kahn做的家谱树的代码(链式前向星): [题目描述] 有个人的家族很大 ...

  5. php子孙树,递归 迭代 得到家谱树 子孙树

    $arr=array( array('id'=>'1','name'=>'吉林','parent'=>0), array('id'=>'2','name'=>'北京',' ...

  6. PHP之实现 家谱树,子孙树

    // 家谱树 function familytree2($arr,$id) { static $Tree = array(); foreach($arr as $k=>$v) { if($v-& ...

  7. 无限极分类JAVA 实现—查子孙树、家谱树

    无限极分类JAVA  实现-查子孙树.家谱树 效果展示: import java.util.*;public class Test {List<HashMap<String, Object ...

  8. AcWing 1191. 家谱树 题解(拓扑排序)

    AcWing 1191. 家谱树 拓扑排序:建立一个队列,遍历所有点,将度数为1的点全部加入队列中,之后队内元素依次出队,对出队的点遍历所有临边,将这些临点的入度–,如果临点的入度为0,则加入队列中, ...

  9. 无限极分类php实现—查子孙树、家谱树

    <?php// 无限级分类中,查家谱树 $area = array( 0=>array('cat_id'=>1,'cat_name'=>'北京市','parent_id'=&g ...

最新文章

  1. Styling with the DataGridColumnStyle
  2. Wireshark如何单独导出包的列信息
  3. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析
  4. python中列表字典和字符串的相互转化
  5. 【重难点】【RabbitMQ 01】消息队列的作用、主流的消息队列、RabbitMQ 基于什么传输消息、RabbitMQ 模型架构、死信队列和延迟队列
  6. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 24: invalid start byte
  7. 句句真研—每日长难句打卡Day11
  8. 毕业设计项目,微博语料情感分析,文本分类
  9. hard-negative mining详细介绍
  10. [记录] web icon 字体
  11. 微pe装linux系统教程,微PE工具箱增加安装Linux系统菜单
  12. 一个命令,删除电脑上顽固的文件和文件夹|干货
  13. python求均值函数_python求列表平均值函数
  14. 微软Surface Pro 3:优秀由内而外
  15. 结构思考力-有逻辑的表达,有结构的思考
  16. 黑客攻防---从零开始认识黑客,简单认知
  17. 杭州河坊街特色手机饰品——招财猫!
  18. 基于因果推断的根因分析
  19. 7-2 迪杰斯特拉方法实现最短路径
  20. WordPress安装教程图解

热门文章

  1. 如何有效防止PHP木马对网站提权
  2. 《华为CC++语言安全规范》笔记
  3. JAVA实现:居民电费阶梯式计价器
  4. 初等证明:费马商的加法分配律证明
  5. 智慧树omg期末测试答案_智慧树求职omg第十五章节测试答案
  6. 使用tvp.player_v2_zepto.js播放腾讯视频
  7. 【摄影补光灯调光驱动方案】低亮度无频闪无抖动无极调光调色IC芯片 LED美颜灯升压恒流芯片FP7209 最大可驱动300W
  8. 抖音昵称html,抖音书单账号昵称_抖音网名大全
  9. 国行版苹果 ios 按键精灵无法联网问题处理
  10. Springboot 服务端为App集成支付宝支付