QOJ.ac

QOJ

時間限制: 1.0 s 記憶體限制: 512 MB 總分: 100 可 Hack ✓

#16853. 中介垂直度

统计

两种经典的图论算法——深度优先搜索(DFS)和广度优先搜索(BFS)——可以构建图的两棵生成树。众所周知,深度优先搜索产生的树没有横向边(即连接两个互不为祖先关系的节点的边),而广度优先搜索产生的树没有纵向边(即在树中连接一个节点与其祖先的边)。在本题中,你需要构建一棵介于两者之间的生成树,使其具有指定数量的横向边和纵向边。

回想一下,无向图由顶点集 $V$ 和边集 $E$ 组成,其中每条边连接两个顶点。我们考虑连通图,即可以通过边从任意顶点到达任何其他顶点。树是一个无环的连通无向图,而图的生成树是其边的一个子集,该子集构成一棵树,且能连通图中的所有顶点。回想树的两个基本性质:在含有 $n$ 个顶点的树中,恰好有 $n - 1$ 条边,且树中任意两个顶点之间恰好存在一条路径。

我们将在图中指定一个顶点 $r$,称其为树的。位于从顶点 $x$ 到顶点 $r$ 的唯一路径上的顶点称为顶点 $x$ 的祖先,而该路径上的第一个顶点称为顶点 $x$ 的父节点,记作 $p_x$。根节点没有父节点。

如果图中的根和生成树已经确定,那么图中的所有边可以分为以下三种类型:

  • 树边(tree edges)—— 所选生成树的边;
  • 纵向边(vertical edges)—— 不属于生成树且连接一个节点与其祖先的边;
  • 横向边(horizontal edges)—— 图中其余的边。

图的生成树的纵向度(verticality)定义为纵向边的数量。

给你一个含有 $n$ 个顶点和 $m$ 条边的图、树根 $r$ 以及一个整数 $h$($0 \le h \le m - n + 1$)。你需要构建一棵以 $r$ 为根的生成树,使其纵向度等于 $h$,或者报告不存在这样的树。

输入格式

每个测试点包含多个测试数据。第一行包含一个整数 $t$($1 \le t \le 10^5$)—— 测试数据的组数。接下来的内容是 $t$ 组测试数据的描述。

每组测试数据的第一行包含四个整数 $n$、$m$、$r$ 和 $h$ —— 分别表示图的顶点数、边数、根节点的编号以及期望的生成树纵向度($2 \le n \le 3 \cdot 10^5$;$n - 1 \le m \le 3 \cdot 10^5$;$1 \le r \le n$;$0 \le h \le m - n + 1$)。

接下来的 $m$ 行中,每行包含两个整数 $u_i, v_i$ —— 表示图中由一条边连接的两个顶点的编号($1 \le u_i, v_i \le n$;$u_i \ne v_i$)。

保证所有图都是连通的,且不包含自环或重边。保证所有测试数据的 $n$ 之和不超过 $3 \cdot 10^5$。保证所有测试数据的 $m$ 之和不超过 $3 \cdot 10^5$。

输出格式

对于每组测试数据,求出满足要求的生成树 $T$。在单独的一行中输出 $n$ 个整数 $p_1, p_2, \dots, p_n$,其中 $p_i$ 是树 $T$ 中第 $i$ 个顶点的父节点编号($1 \le p_i \le n$)。对于根节点 $p_r$,你可以输出 $1$ 到 $n$ 之间的任意整数。如果不存在满足要求的生成树 $T$,则输出 $n$ 个 $-1$。

样例

输入样例 1

4
5 7 2 0
1 2
2 3
3 4
4 1
3 5
5 4
1 5
5 7 2 1
1 2
2 3
3 4
4 1
3 5
5 4
1 5
5 7 2 2
1 2
2 3
3 4
4 1
3 5
5 4
1 5
5 7 2 3
1 2
2 3
3 4
4 1
3 5
5 4
1 5

输出样例 1

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

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.