会员专享
请先
登录,登录后可使用今日免费解锁;
开通会员,或
购买
该题目所属题库
,可解锁完整内容。
思路
题目有点绕,大致意思就是让你求有哪些点能够到达终点工序,然后从小到达输出。
逆向思维,构建反向图,然后跑一遍拓扑排序,在遍历过程中将所有能够遍历到的点标记为 true 最后排序输出
代码
#include<bits/stdc++.h>
P1860.2024.8.1-用友-第一题-生产线
小友设计了一条新的生产线,在该条生产线上共有0-n种工序。每种工序之间存在上下游关系,如果一种工序有下游工序,则为终点工序。如果一种工序有可能下游工序均可到达终点工序,则称该工序为合规工序。
给你一个有向图,其中有n个节点,表示不同种工序,以及不同工序之间的关系。请计算该生产线中,所有的合规工序,并按照升序排列。
输入描述
第一行输入正整数n,表示共有n个工序节点;接下来n行,每行有(1≤j≤n)个数,表示工序节点与其余n个工序节点上下游关系。
注意:若工序节点为终点工序,则j=1,且数值为-1。
输出描述
输出一个数组,用来表示所有的合规工序,并按照升序排列。
补充说明
- n==graph.length
- 1≤n≤104
- 0≤n[i].length≤n
- −1≤n[i][j]≤n−1
- n[i] 按严格递增顺序排列
- 图中可能包含自环
例1
输入
2
3 4
0 4
输出
4
说明
只有工序4是终点工序,即为合规工序。
例2
输入
7
1 2
2 3
5 0
5
-1
-1
输出
2 4 5 6
说明
工序5和6为终点工序,即为合规工序。工序2和4开始的所有下游工序最终指向终点工序,按升序排列最终结果为2, 4, 5, 6。