CF1361E James and the Chase

题目描述

詹姆斯·邦德有一个新的计划来抓捕他的敌人。有若干个城市以及它们之间的有向道路,使得可以通过这些道路在任意两个城市之间旅行。当敌人在某个城市出现时,邦德知道她的下一个目的地,但不知道她会选择哪条路径前往。 如果对于每一个城市 $b$,从城市 $a$ 到 $b$ 恰好存在一条简单路径,则称城市 $a$ 是有趣的。这里的简单路径指的是一条经过的城市各不相同的序列,且对于每一对相邻的城市,存在一条从前一个城市指向后一个城市的有向道路。 邦德的敌人擅长逃脱,因此只有从有趣的城市开始追捕才有可能抓住她。詹姆斯希望在这些有趣的城市安排自己的人手。然而,如果有趣的城市数量不足,整个行动就没有意义,因为邦德的人可能会等待太久。 你需要找出所有有趣的城市,或者说明有趣的城市数量不足。这里“不足”指的是有趣的城市数量严格小于所有城市数量的 $20\%$。

输入格式

第一行包含一个整数 $t$($1 \leq t \leq 2000$),表示测试用例的数量。每个测试用例的描述如下: 第一行包含两个整数 $n$ 和 $m$($1 \leq n \le 10^5$,$0 \leq m \le 2 \times 10^5$),分别表示城市数量和道路数量。接下来的 $m$ 行,每行包含两个整数 $u$ 和 $v$($u \neq v$,$1 \leq u, v \leq n$),表示存在一条从 $u$ 到 $v$ 的有向道路。 你可以假设对于每一对有序城市对,最多只有一条道路。所有测试用例中 $n$ 的总和不超过 $10^5$,$m$ 的总和不超过 $2 \times 10^5$。

输出格式

如果有趣的城市数量严格小于所有城市数量的 $20\%$,输出 $-1$。否则,设有趣的城市数量为 $k$,请按升序输出 $k$ 个不同的整数,表示有趣城市的编号。

说明/提示

在所有示意图中,绿色的城市表示有趣城市,红色的城市表示非有趣城市。 在第一个样例中,每个城市都是有趣的。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1361E/ea02130aaa657158e02932dc79202b09c65411df.png) 在第二个样例中,没有城市是有趣的。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1361E/9f70c6807b725116da2e28994dd20c33629e3f31.png) 在第三个样例中,城市 $1$、$2$、$3$ 和 $5$ 是有趣的。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1361E/f1d050ad3537d17cb3725772a1afecd8c2c46f32.png) 在最后一个样例中,只有城市 $1$ 是有趣的。这严格小于所有城市数量的 $20\%$,因此答案为 $-1$。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1361E/d74f523bcab5b0c943643c6309e1f1139462efcb.png) 由 ChatGPT 4.1 翻译