eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

Граф операций

Граф операций

Задан неориентированный граф. Каждому ребру (u, v) графа приписана некоторая бинарная операция и некоторое число c. Число c может принимать значения 0 или 1, а операции могут быть слудющими: логическое умножение (AND), логическое сложение (OR) и сложение по модулю два (XOR). Необходимо выяснить, можно ли присвоить каждой вершине u число 0 или 1 (обозначим это значение как A(u)) таким образом, чтобы для каждого ребра (u, v) результат приписанной ему бинарной операции над величинами A(u) и A(v) был равен написанному на нем числу c.

Правила вычисления указанных операций:

  • (0 AND 1) = (1 AND 0) = (0 AND 0) = 0, (1 AND 1) = 1
  • (0 OR 1) = (1 OR 0) = (1 OR 1) = 1, (0 OR 0) = 0
  • (0 XOR 1) = (1 XOR 0) = 1, (1 XOR 1) = (0 XOR 0) = 0

Входные данные

В первой строке записано количество вершин n и ребер m в графе (1n1000, 0m300000). Следующие m строк содержат описание ребер. Ребро задается номерами соединяемых вершин ui, vi (1ui, vin, uivi), числом ci и названием операции (AND, OR или XOR). Никакое ребро не задается более одного раза.

Выходные данные

Выведите "YES", если можно найти требуемый набор значений для вершин, и "NO" в противном случае.

Ліміт часу 1 секунда
Ліміт використання пам'яті 128 MiB
Вхідні дані #1
3 3
1 2 1 OR
2 3 1 AND
1 3 1 XOR
Вихідні дані #1
YES
Вхідні дані #2
3 2
1 2 1 AND
2 3 0 OR
Вихідні дані #2
NO
Автор Віталій Гольдштейн
Джерело 2011 Зимова Школа, Харків, День 9