#P11466. [BalticOI 2025]旅游

[BalticOI 2025]旅游

题目描述

托伦拥有众多迷人的旅游景点。我们的导游精心整理了一份清单,列出了市中心 nn 个集合点之间的 mm 条单向步行路线。每条路线编号从 11mm,集合点编号从 11nn。每条路线从一个集合点通向另一个集合点,沿途可欣赏一个独特的景点。可能有多条路线经过同一景点,也可能同一对集合点之间有多条路线。我们希望在休息日组织一场精彩的城市游。

一场城市游是由一系列步行路线组成的,每条路线的起点必须是前一条路线的终点,并且最后一条路线的终点必须回到整个行程的起点。

我们认为一场城市游精彩,是指它不会连续两次经过同一景点。也就是说,行程中每两条连续的路线必须展示不同的景点,且首条路线与末条路线展示的景点也要不同。不过,如果非连续的路线经过同一景点,我们并不介意。特别地,同一路线可以在行程中多次经过(但不能连续两次经过)。

你的任务是判断是否可以组织一场精彩的城市游,如果可以,请找出一条。你可以输出任意一条包含不超过 mm 条路线的精彩城市游。保证如果存在精彩城市游,那么一定存在一条不超过 mm 条路线的精彩城市游。

输入格式

第一行包含一个正整数 tt (1t5105)(1 \leq t \leq 5 \cdot 10^{5}),表示测试数据的组数。

每组测试数据的第一行包含两个正整数 nnmm (2n,1m)(2 \leq n, 1 \leq m),分别表示集合点的数量和步行路线的数量。

接下来的 mm 行描述 mm 条步行路线。第 ii 行包含三个正整数 xi,yi,cix_i, y_i, c_i $(1 \leq x_i, y_i \leq n, x_i \neq y_i, 1 \leq c_i \leq m)$,表示第 ii 条路线从集合点 xix_i 开始,到集合点 yiy_i 结束,沿途可欣赏景点 cic_i

NNMM 分别表示所有测试数据中 nnmm 的总和。保证 N,M106N, M \leq 10^{6}

输出格式

对于每组测试数据,第一行输出 YES 表示可以组织一场精彩城市游,输出 NO 表示不可以。如果可以组织,则第二行首先输出一个正整数 kk (2km)(2 \leq k \leq m),表示构成精彩城市游的路线数量,随后输出 kk 个整数 p1,p2,,pkp_1, p_2, \ldots, p_k,用单个空格分隔。这些数字描述了一场精彩城市游,依次经过路线 p1,p2,,pkp_1, p_2, \ldots, p_k,最后回到起点。

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

NO
YES
2 2 3
NO
YES
6 3 4 5 6 1 2
YES
4 2 4 2 3

数据范围与提示

详细子任务附加限制及分值如下表所示。

子任务编号 附加限制 分值
11 m10m \leq 10t100t \leq 100 99
22 M5000M \leq 5000 2323
33 M5104M \leq 5 \cdot 10^{4} 1919
44 M2105M \leq 2 \cdot 10^{5} 2525
55 无附加限制 2424