前言:这是一道笔试题目,虽然想到了拓扑排序,但是并没有对图论进行复习,因此对这道题目印象深刻,就该题讨论一下拓扑排序的实现
题目描述
小美因为各种原因无法及时返校,为了完成学业,小美只能在家里上网课,网案由n个课程视频组成,编号为1到n。每个视频都需要从头看到比才算完成该部分的学习,且某个视频只能在看完指定的一些视频之后才能开始播故。因为小美的学习能力和她用来上网课的电脑性能都很好,所以小美可以同时观看任意多个课程视频,现在小美想知道,若她不眠不休地学习,每个课程视频最早能在她开始学习多长时间之后才能结束。
输入描述
第一行有一个正整数n(1<=n<500),代表课程视频的数量。
接下来n行中的第i行开头有两个正整数L.C(1<=L<=100,0<=C<n)。L代表编号为i的视颇的时长为L分钟。C代表该观看该视频之前需要看完指定的C个视频。若C为零,则该视频可以立即观看。否则这一行接下来有C个用空格分开的正整数,代表编号为的视频所依赖的那些课程视频的编号。数字间两两有空格隔开.
输出描述
输出一行,每一行结果都显示每个课程结束时间。数字间两两空格隔开。
样例:
输入
3
4 0
2 2 1 3
3 0
输出
4 6 3
题目思路
题目转化 虽然题目用了很长时间去描述小美的故事,但是我们实质抽象去看待问题,这也就是一个图论问题。每一个课程即一个图的节点,可以同时观看任意多个视频,我们无须考虑课程数量。但是课程会受前置视频的影响,也就是说学习该课程完整视频实质上是一个有向无环图。
样例转化 我们简单的用上述样例将课程转化成有向无环图。