#P10790. [NOI2024] 树形图

[NOI2024] 树形图

背景

由于评测机性能差异,本题时限翻倍。

题目描述

给定一个 nn 个点 mm 条边的简单有向图 GG,顶点从 11 到 nn 编号。其中简单有向图的定义为不存在重边与自环的有向图。

定义顶点 rr 是有向图 GG 的根当且仅当对于 1≤k≤n1\leq k\leq n,顶点 rr 到顶点 kk 存在恰好一条有向简单路径,其中简单路径的定义为不经过重复点的路径。

定义每个点的种类如下:

  • 若顶点 rr 是图 GG 的根,则称顶点 rr 为图 GG 的一类点。
  • 若顶点 rr 不是图 GG 的一类点,且存在一种删边的方案,使得图 GG 在删去若干条边后得到的图 G′G' 满足:所有图 GG 中的一类点都是 G′G' 的根,且顶点 rr 也是图 G′G' 的根,则称顶点 rr 为图 GG 的二类点。
  • 若顶点 rr 不满足上述条件,则称顶点 rr 为图 GG 的三类点。

根据上述定义,图 GG 的每个点都恰好属于一类点,二类点,三类点之一。你需要判断点 1∼n1\sim n 分别属于这三个种类中的哪一种。

输入格式

本题有多组测试数据。

输入的第一行包含一个非负整数 cc,表示测试点编号。c=0c=0 表示该测试点为样例。

输入的第二行包含一个正整数 tt,表示测试数据组数。

接下来依次输入每组测试数据,对于每组测试数据:

输入的第一行包含两个正整数 n,mn,m,分别表示有向图的点数和边数。

接下来 mm 行,每行包含两个正整数 u,vu,v,表示一条从 uu 到 vv 的有向边。保证 1≤u,v≤n1\leq u,v\leq n,且给定的有向图 GG 不存在重边与自环。

输出格式

对于每组数据,输出一行包含一个长度恰好为 nn 的字符串 ss 表示每个点的种类。其中 si=1s_i=1 表示点 ii 为一类点,si=2s_i=2 表示点 ii 为二类点,si=3s_i=3 表示点 ii 为三类点。

0
2
4 7
2 1
4 1
1 4
2 3
3 4
2 4
4 3
4 5
1 2
2 3
2 4
3 1
4 3
3233
2211
见 graphee2.in/ans
这个样例满足测试点 2 的约束条件

见 graphee3.in/ans
这个样例满足测试点 3,4 的约束条件

见 graphee4.in/ans
这个样例满足测试点 5,6 的约束条件

见 graphee5.in/ans
这个样例满足测试点 8,9 的约束条件

见 graphee6.in/ans
这个样例满足测试点 14,15 的约束条件

提示

【样例 1 解释】

样例 11 共包含两组测试数据。

对于第一组测试数据,输入的图如下:

由于 1,3,41,3,4 均不存在到达 22 的路径,因此 1,3,41,3,4 均为三类点。由于 22 到 11 的有向简单路径共有三条:2→12\to 1,2→4→12\to 4\to 1,2→3→4→12\to 3\to 4\to 1,因此 22 不是一类点。删去边 1→41\to 4,4→14\to 1,3→43\to 4,4→34\to 3 后,22 到 1,3,41,3,4 的有向简单路径均唯一,因此 22 是图 G′G' 的根,即 22 是二类点。

对于第二组测试数据,输入的图如下:

容易发现 3,43,4 均为一类点,删去边 2→32\to 3 后,每个点到其他所有点的有向简单路径均唯一,因此 1,21,2 均为二类点。

【数据范围】

对于所有测试数据保证:1≤t≤101\leq t\leq 10,2≤n≤1052\leq n\leq 10^5,1≤m≤2×1051\leq m\leq 2\times 10^5,且图 GG 不存在重边与自环。

::cute-table{tuack}

测试点编号 t≤t\leq n≤n\leq m≤m\leq 特殊性质
11 33 1010 2020 无
22 1010 10310^3 20002000 A
3,43,4 ^ ^ B
5,65,6 无
77 10510^5 2×1052\times 10^5 A
8,98,9 ^ BC
10∼1310\sim 13 B
14,1514,15 C
16∼2016\sim 20 无
  • 特殊性质 A:保证不存在一类点。
  • 特殊性质 B:保证不存在二类点。
  • 特殊性质 C:保证编号为 11 的点为图 GG 的一类点。