首页 > 试题广场 >

有序图

[编程题]有序图
  • 热度指数:1158 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
现在给出一张含有 个点的有向无环图,我们称这张图是有序图当且仅当这个图满足以下条件:
1. 存在一个 1-n 数字的全排列 ,并令 号结点的权值为 p[i] 
2. 如果图中存在 号结点到 号结点的一条边,则 号结点的权值要小于 号结点的权值。 显然可能有多个序列满足条件,请你找出字典序最小的全排列 ,使得这个图成为有序图。
数据范围:

输入描述:
第一行包含两个正整数n,m,分别表示图上结点是数量和有向边的数量。 接下来m行每行有两个正整数u,v,表示存在一条从u结点到v结点的有向边。


输出描述:
输出一个字典序最小的,1-n的全排列,使得这张图是有序图,元素中间使用空格隔开。
示例1

输入

3 3
1 2
1 3
3 2

输出

1 3 2
头像 _Bingbong
发表于 2025-01-01 14:15:55
解题思路 这是一个图论问题,通过反向建图和拓扑排序来找到字典序最小的全排列。 关键点: 反向建图:将所有边反向,便于从大到小分配数字 使用最大堆维护可选节点 从n到1逆序分配数字,保证字典序最小 算法步骤: 建立反向图的邻接表 找出所有入度为 的点加入最大堆 每次取出堆顶元素,分配最大可用数 展开全文