QOJ.ac

QOJ

Time Limit: 2.0 s Memory Limit: 1024 MB Total points: 100 Hackable ✓

#9833. 一半就够了

Statistics

Jacob 正在学习图论。今天他了解到,有向图的拓扑排序是一种顶点的线性排序,使得对于每一条从顶点 $u$ 到顶点 $v$ 的有向边 $(u, v)$,$u$ 在排序中都出现在 $v$ 之前。

众所周知,拓扑排序仅存在于无环图中。但我们该如何将这一概念推广到任意图呢?

Jacob 提出了“半拓扑排序”的概念:图顶点的一种线性排序,使得图中至少一半的有向边 $(u, v)$ 满足 $u$ 在排序中出现在 $v$ 之前。

换句话说,如果图有 $m$ 条边,对于某种特定的排序,有 $k$ 条边满足上述条件,那么如果 $k \ge \lceil \frac{m}{2} \rceil$,该排序就被称为半拓扑排序。

请帮助 Jacob 找到给定图的任意一个半拓扑排序,或者报告不存在这样的排序。

输入格式

每个测试包含多个测试用例。第一行包含测试用例的数量 $t$ ($1 \le t \le 10^4$)。

接下来是各测试用例的描述。

每个测试用例的第一行包含两个整数 $n$ 和 $m$,分别表示图的顶点数和边数 ($2 \le n \le 10^5$; $1 \le m \le 2 \cdot 10^5$)。

接下来的 $m$ 行中,第 $i$ 行包含两个整数 $u_i$ 和 $v_i$,描述一条从顶点 $u_i$ 到顶点 $v_i$ 的有向边 ($1 \le u_i, v_i \le n$; $u_i \neq v_i$)。图中不包含重边:每条有向边 $(u, v)$ 最多出现一次。但是,允许同时存在边 $(u, v)$ 和 $(v, u)$。

保证所有测试用例的 $n$ 之和不超过 $10^5$,所有测试用例的 $m$ 之和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,如果不存在所需的半拓扑排序,则输出单个整数 $-1$。

否则,输出 $n$ 个不同的整数 $p_1, p_2, \dots, p_n$,描述给定图的排序 ($1 \le p_i \le n$)。在该列表中,至少有 $\lceil \frac{m}{2} \rceil$ 条边 $(u_i, v_i)$ 满足整数 $u_i$ 出现在整数 $v_i$ 之前。如果存在多个答案,输出其中任意一个即可。

样例

输入 1

2
3 3
1 2
2 3
3 1
5 6
4 2
2 1
4 3
1 4
3 2
3 5

输出 1

1 2 3
3 1 5 4 2

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.