QOJ.ac

QOJ

Límite de tiempo: 15 s Límite de memoria: 1024 MB Puntuación total: 100

#5510. 线段替换

Estadísticas

Ordnungrad 是一座居民以在生活的各个方面保持完美秩序而自豪的城市:街道总是干净的,电车总是准时到站,而且由于市政委员会颁布法令宣布在城市范围内进行犯罪活动已不再可能,警察局也被关闭了。这最后一条消息引起了废品收集者 Byteasar 的注意。

城市电车网络由 $n$ 个交叉路口组成,其中 $p$ 个路口附近设有电车环路,交叉路口之间由 $n-1$ 条双向轨道连接,使得从任何一个交叉路口出发都能以唯一的方式到达其他任何路口。Byteasar 确定了 $k$ 条照明不良的轨道。在接下来的 $k$ 个夜晚中,他计划拆除其中一条轨道,并将获得的废料运出城外。

市政委员会肯定更愿意假装轨道是因为翻新而关闭,而不是承认在他们的任期内发生了如此严重的混乱……或者至少 Byteasar 是这样认为的。然而,Ordnungrad 的居民非常看重这一点:如果一条街道多年来每小时有 10 班电车运行(计算所有经过这条街道的线路),那么第二天也必须正好有 10 班——不多不少。如果任何一个早晨市政委员会未能满足这一要求(在任何活跃的轨道上),那么每个人都会显而易见地发现这些关闭根本不是计划内的!这正是 Byteasar 想要避免的。

更准确地说,在第 $j$ 天(对于每个 $j \le k$),应该能够创建一个满足以下条件的替换线路网格:

  • 每条线路必须在某个电车环路处开始和结束其行程,每小时运行一定次数(双向次数相同),且其路线必须是一条简单路径(因为电车不能直接掉头)。
  • 从第 1 天到第 $j$ 天,没有任何线路可以经过 Byteasar 已经偷走的轨道。
  • 如果第 $i$ 条轨道尚未被偷走,那么在这一天,所有经过该轨道的线路每小时总共必须运行 $c_i$ 次(双向各一次)。

当然,没有当地程序员愿意帮助 Byteasar,所以他求助于你。请找出正确的轨道偷窃顺序,或者说明不存在这样的顺序。请注意,每一天的替换线路网格可以独立于其他日期的网格进行创建,它只需要满足所描述的条件即可。

注意:Byteasar 测量出的 $c_i$ 值可能无法描述一个正确的线路网格(毕竟,任何人都有可能在计算经过的电车时出错)——在这种情况下,你也需要告知 Byteasar 他的错误。换句话说,你还需要在第 $j=0$ 天,即第一次偷窃之前,验证上述描述的条件。

输入格式

第一行包含测试用例的数量 $z$ ($1 \le z \le 15\,000$)。接下来是各个测试用例的描述。

每个测试用例的第一行包含两个整数 $n, p$ ($2 \le p \le n \le 500\,000$),分别表示交叉路口和电车环路的总数。

交叉路口的编号为 $1$ 到 $n$,轨道的编号为 $1$ 到 $n-1$。

下一行包含 $p$ 个不同的整数 $p_i$ ($1 \le p_i \le n$),按升序排列,描述了设有环路的交叉路口。你可以假设如果一个交叉路口只有一条轨道离开,那么该路口一定设有环路(但环路也可以位于其他交叉路口)。

接下来的 $n-1$ 行描述轨道。每行包含三个整数 $u_i, v_i, c_i$ ($1 \le u_i, v_i \le n, u_i \neq v_i, 1 \le c_i \le 10^9$),表示第 $i$ 条轨道连接交叉路口 $u_i$ 和 $v_i$,并且根据 Byteasar 的测量,每小时有 $c_i$ 班电车双向经过该轨道。

下一行包含一个整数 $k$ ($1 \le k \le n-1$)。

测试用例的最后一行包含 $k$ 个不同的整数 $k_i$ ($1 \le k_i \le n-1$),按升序排列,代表 Byteasar 想要偷走的轨道。

所有测试用例的 $n$ 之和不超过 $2\,000\,000$。

输出格式

对于每个数据集,如果存在满足所描述条件的轨道偷窃顺序,则在输出的第一行写上单词 TAK。在下一行写上 $k$ 个整数 $r_i$ ($1 \le r_i \le n-1$),其中 $r_i$ 是 Byteasar 在第 $i$ 个夜晚应该拆除的轨道编号。Byteasar 选择的 $k$ 条轨道中的每一条都应在此列表中恰好出现一次。如果存在多个正确答案,你可以输出其中任何一个。

如果不存在你所寻找的顺序,或者如果输入值 $c_i$ 甚至在偷窃开始前就无法描述任何有效的线路网格,则打印单词 NIE

样例

输入 1

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

输出 1

TAK
2 3
NIE

说明

在第一个测试用例中,先偷走第 2 条轨道,再偷走第 3 条轨道,将允许市政官员在每次变动后制定正确的替换线路网络:

  • 在第一次偷窃之前,以下线路网格满足任务目标:经过交叉路口 1-7-2 的线路每小时运行 3 次,经过 2-7-3-5-6 的线路运行 1 次,经过 3-7-4 的线路运行 3 次。
  • 在偷走第 2 条轨道(连接顶点 2 和 7)后,可以制定以下替代线路网格:线路 1-7-3 运行 1 次,线路 1-7-3-5-6 运行 1 次,线路 1-7-4 运行 1 次,线路 3-7-4 运行 2 次。
  • 在偷走第 2 条轨道(连接顶点 2 和 7)和第 3 条轨道(连接顶点 3 和 7)后,可以制定以下替代线路网格:线路 1-7-4 运行 3 次,线路 3-5-6 运行 1 次。

相反的顺序 (3 2) 也是一个正确答案。

在第二个测试用例中,Byteasar 还想偷走第 5 条和第 6 条轨道。无论他先拆除哪一条,在这次偷窃之后,都无法制定出能够妥善服务于另一条轨道的线路网格。因此,答案是 NIE

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.