#MNS0104. 任务排序
任务排序
题目描述:
某软件开发团队需要为 N (1<=N<=100000)个核心功能模块(编号 1…N)制定开发顺序。团队根据项目需求和技术依赖, 整理了 M 份 “优先级开发说明”(1≤M≤50,000),每份说明都包含一个有序的模块列表,表示这些模块必须按照列 表中的顺序依次开发。例如,若某份说明是序列 2、5、1,则模块 2 必须在模块 5 之前开发,模块 5 必须在模块 1 之前开发。 这些开发说明按优先级从高到低排列,团队的目标是找到最大的 X,使得最终的开发顺序能满足前 X 份说明的要求。当 存在多个开发顺序都能满足前 X 份说明时,团队遵循 “小编号模块优先” 的原则 —— 即选择字典序最小的开发顺序 (字典序定义:若两个顺序在第 j 个位置前完全相同,且第 j 个位置上顺序 A 的模块编号小于顺序 B,则 A 的字典序更小)。 请帮助团队确定最优的模块开发顺序。
输入格式:
第一行包含两个整数 N(模块总数)和 M(开发说明总数)。 接下来 M 行,每行描述一份开发说明:第一个数是该说明包含的模块数量 m_i,后面跟着 m_i 个整数, 代表该说明中模块的开发顺序。所有 m_i 的总和至多为 200,000。
输出格式:
输出 N 个空格分隔的整数,表示 1…N 的一个排列,即最优的模块开发顺序。
样例:
4 3
3 1 2 3
2 4 2
3 3 4 1
1 4 2 3
相关
在下列比赛中: