#1187. [NOI2015] 程序自动分析

[NOI2015] 程序自动分析

题目描述

在程序自动分析中,需要检查一批约束能否同时成立。这里考虑只涉及相等和不等关系的情形。用 x1,x2,x3,…x_1,x_2,x_3,\ldots 表示程序里的变量。给定 nn 个约束,每一个形如 xi=xjx_i=x_j 或 xi≠xjx_i\ne x_j。是否能给各变量赋值,使所有约束都满足?

例如,若要求 x1=x2x_1=x_2、x2=x3x_2=x_3、x3=x4x_3=x_4,同时又要求 x4≠x1x_4\ne x_1,则前三个条件已强制 x1x_1 和 x4x_4 相等,与最后一个条件矛盾。

输入中会给出若干个这样的约束问题,请分别作出判断。

输入格式

第一行输入正整数 tt,表示需要分别判断的独立问题个数。

每个问题的首行是正整数 nn,表示这一组的约束数。随后的 nn 行分别给出三个整数 i,j,ei,j,e,相邻整数用一个空格隔开。当 e=1e=1 时约束为 xi=xjx_i=x_j,当 e=0e=0 时约束为 xi≠xjx_i\ne x_j。

输出格式

共输出 tt 行。第 kk 行对应第 kk 个问题。若可以同时满足该组的全部约束,输出大写的 YES,否则输出大写的 NO。

2
2
1 2 1
1 2 0
2
1 2 1
2 1 1
NO
YES
2
3
1 2 1
2 3 1
3 1 1
4
1 2 1
2 3 1
3 4 1
1 4 0
YES
NO

说明/提示

样例 1

第一组同时要求 x1=x2x_1=x_2 和 x1≠x2x_1\ne x_2,两条约束彼此冲突。第二组两次要求相同的两个变量相等,让它们取同一个值即可。

样例 2

第一组要求 x1=x2x_1=x_2、x2=x3x_2=x_3 和 x3=x1x_3=x_1。把三个变量都赋予同一个值,三条约束就全部成立。第二组先给出 x1=x2x_1=x_2、x2=x3x_2=x_3、x3=x4x_3=x_4,由此已经有 x1=x4x_1=x_4。最后又要求 x4≠x1x_4\ne x_1,因此无解。

数据范围

原题各测试点的约定见下表。各档均有 1≤t≤101\le t\le10 且 e∈{0,1}e\in\{0,1\}。

原题测试点编号 每组的约束数 nn 变量编号 i,ji,j
1、2 1≤n≤101\le n\le10 1≤i,j≤1041\le i,j\le10^4
3、4 1≤n≤1001\le n\le100
5、6、7 1≤n≤1051\le n\le10^5
8、9、10 1≤i,j≤1091\le i,j\le10^9