#P11117. [ROI 2024 Day 2] 交互式通道
[ROI 2024 Day 2] 交互式通道
题目背景
翻译自 ROI 2024 D2T2。
ROI 的举办地 Innopolis 大学由 个建筑物和 条通道组成。每条通道连接两个不同的建筑物,任何两个建筑物之间不会有多于一条通道。
已知每个建筑物都有一个可以打开或关闭的灯光。最初,所有建筑物的灯光都是关闭的。校园管理员可以在一个操作中打开或关闭任何一个建筑物的灯光。管理员还可以在灯光已经打开的情况下按下开灯按钮,或在灯光已经关闭的情况下按下关灯按钮。这些操作不会改变建筑物的灯光状态。
类似地,每条通道也有一个可以打开或关闭的灯光。最初,所有通道的灯光也都是关闭的。但与建筑物的灯光不同,通道的灯光会自动变化:如果在管理员的操作后,该通道连接的两所建筑物的灯光状态相同,那么通道的灯光也会变为相同的状态,否则它不会改变。
换句话说,如果在管理员的操作后,连接的两个建筑物的灯光都关闭,则通道的灯光也会关闭。如果连接的两个建筑物的灯光都打开,则通道的灯光也会打开。如果一个建筑物的灯光打开而另一个关闭,则通道的灯光状态不变。
题目描述
在 ROI 开始之前,校园主任为每个建筑物和每条通道确定了它们是否应该被照亮。请你检查管理员是否可以通过任意数量的操作来实现主任的要求。如果可以,请找到任何一种满足要求的操作序列。能够正确判断是否可以得到期望的灯光状态,即使未提供操作序列的解决方案,也能获得该测试点一半的分数。
输入格式
输入包含多组数据。第一行包含一个整数 ,表示测试数据的组数()。
在每组数据中:
第一行输入两个整数 和 ,分别表示建筑物的数量和通道的数量(, )。
接下来的 行是通道的描述。在第 行中有三个整数 , , ,分别是由第 个通道连接的两个建筑物编号,以及第 个通道要求的灯光状态(, , )。如果 ,则第 个通道的灯光状态最终应该是关闭的,如果 ,则应该是开启的。
最后一行给出 个整数 ,表示各建筑物要求的灯光状态()。如果 ,则建筑物 的灯光状态最终应该是关闭的,如果 ,则应该是开启的。
所有 值的总和不超过 , 值的总和不超过 。
输出格式
对于每组输入:
- 如果不存在一种操作序列能使得建筑物和通道的灯光状态达到要求,则输出
NO
。 - 如果存在操作序列,则输出
YES
。如果不展示具体的操作序列(只拿部分分),则在下一行输出数字 并继续输出下一组数据(如果有的话)。如果展示操作序列,则在下一行输出整数 ,表示操作的数量(,所有 值的总和不超过 ),然后在接下来的 行中输出下列具体操作:- 在第 行()中,输出两个整数 ,分别是改变灯光状态的建筑物编号,以及新的灯光状态(,;如果 ,则表示需要关闭建筑物 的灯光,如果 ,则表示需要打开建筑物 的灯光)。
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
提示
样例解释:
第一组数据包含 个建筑物(用圆圈表示)和 条通道(用线表示)。机房或通道的灯光状态通过加粗的线表示(如果加粗则表示开灯)。要达到所需的灯光状态,需要 步操作。下图展示了初始灯光状态及每一步操作后的状态:
第二组数据需要达到下列机房和通道的配置,但这是不可能的:
第三组数据中有一个建筑物需要开启灯光。这可以通过一步操作完成。
第四组数据中有一个建筑物需要关闭灯光。一个可行的操作序列是一步操作,关闭该机房的灯光。尽管灯光已经是关闭状态,这样的操作依然是有效的。
第五组数据中有两个建筑物和一条通道,所有的灯光都需要关闭。空的操作序列也是一种可行的解决方案。
数据范围见输入格式。