luogu#P11117. [ROI 2024 Day 2] 交互式通道

[ROI 2024 Day 2] 交互式通道

题目背景

翻译自 ROI 2024 D2T2

ROI 的举办地 Innopolis 大学由 nn 个建筑物和 mm 条通道组成。每条通道连接两个不同的建筑物,任何两个建筑物之间不会有多于一条通道。

已知每个建筑物都有一个可以打开或关闭的灯光。最初,所有建筑物的灯光都是关闭的。校园管理员可以在一个操作中打开或关闭任何一个建筑物的灯光。管理员还可以在灯光已经打开的情况下按下开灯按钮,或在灯光已经关闭的情况下按下关灯按钮。这些操作不会改变建筑物的灯光状态。

类似地,每条通道也有一个可以打开或关闭的灯光。最初,所有通道的灯光也都是关闭的。但与建筑物的灯光不同,通道的灯光会自动变化:如果在管理员的操作后,该通道连接的两所建筑物的灯光状态相同,那么通道的灯光也会变为相同的状态,否则它不会改变。

换句话说,如果在管理员的操作后,连接的两个建筑物的灯光都关闭,则通道的灯光也会关闭。如果连接的两个建筑物的灯光都打开,则通道的灯光也会打开。如果一个建筑物的灯光打开而另一个关闭,则通道的灯光状态不变。

题目描述

在 ROI 开始之前,校园主任为每个建筑物和每条通道确定了它们是否应该被照亮。请你检查管理员是否可以通过任意数量的操作来实现主任的要求。如果可以,请找到任何一种满足要求的操作序列。能够正确判断是否可以得到期望的灯光状态,即使未提供操作序列的解决方案,也能获得该测试点一半的分数。

输入格式

输入包含多组数据。第一行包含一个整数 tt,表示测试数据的组数(1t500001 \leq t \leq 50000)。

在每组数据中:

第一行输入两个整数 nnmm,分别表示建筑物的数量和通道的数量(1n1051 \leq n \leq 10^5, 0m2×1050 \leq m \leq 2 \times 10^5)。

接下来的 mm 行是通道的描述。在第 ii 行中有三个整数 aia_i, bib_i, cic_i ,分别是由第 ii 个通道连接的两个建筑物编号,以及第 ii 个通道要求的灯光状态(1ai,bin1 \leq a_i, b_i \leq n, aibia_i \ne b_i, 0ci10 \leq c_i \leq 1)。如果 ci=0c_i = 0,则第 ii 个通道的灯光状态最终应该是关闭的,如果 ci=1c_i = 1,则应该是开启的。

最后一行给出 nn 个整数 d1,d2,,dnd_1, d_2, \dots, d_n,表示各建筑物要求的灯光状态(0di10 \leq d_i \leq 1)。如果 dv=0d_v = 0,则建筑物 vv 的灯光状态最终应该是关闭的,如果 dv=1d_v = 1,则应该是开启的。

所有 nn 值的总和不超过 10510^5mm 值的总和不超过 2×1052 \times 10^5

输出格式

对于每组输入:

  • 如果不存在一种操作序列能使得建筑物和通道的灯光状态达到要求,则输出 NO
  • 如果存在操作序列,则输出 YES。如果不展示具体的操作序列(只拿部分分),则在下一行输出数字 1-1 并继续输出下一组数据(如果有的话)。如果展示操作序列,则在下一行输出整数 ss,表示操作的数量(0s1060 \leq s \leq 10^6,所有 ss 值的总和不超过 10610^6),然后在接下来的 ss 行中输出下列具体操作:
    • 在第 ii 行(1is1 \leq i \leq s)中,输出两个整数 vi,xiv_i,x_i,分别是改变灯光状态的建筑物编号,以及新的灯光状态(1vin1 \leq v_i \leq n0xi10 \leq x_i \leq 1;如果 xi=0x_i = 0,则表示需要关闭建筑物 viv_i 的灯光,如果 xi=1x_i = 1,则表示需要打开建筑物 viv_i 的灯光)。
5
4 4
1 2 0
2 3 1
3 4 0
2 4 1
0 1 0 0
4 4
1 2 0
2 3 1
3 4 0
4 1 1
0 1 0 1
1 0
1
1 0
0
2 1
1 2 0
0 0
YES
5
4 1
3 1
2 1
3 0
4 0
NO
YES
1
1 1
YES
1
1 0
YES
0

提示

样例解释:

第一组数据包含 44 个建筑物(用圆圈表示)和 44 条通道(用线表示)。机房或通道的灯光状态通过加粗的线表示(如果加粗则表示开灯)。要达到所需的灯光状态,需要 55 步操作。下图展示了初始灯光状态及每一步操作后的状态:

第二组数据需要达到下列机房和通道的配置,但这是不可能的:

第三组数据中有一个建筑物需要开启灯光。这可以通过一步操作完成。

第四组数据中有一个建筑物需要关闭灯光。一个可行的操作序列是一步操作,关闭该机房的灯光。尽管灯光已经是关闭状态,这样的操作依然是有效的。

第五组数据中有两个建筑物和一条通道,所有的灯光都需要关闭。空的操作序列也是一种可行的解决方案。

数据范围见输入格式。