📜  门|门 CS 1996 |第 71 题(1)

📅  最后修改于: 2023-12-03 15:42:20.754000             🧑  作者: Mango

门|门 CS 1996 |第 71 题

这是一道经典的图论题目,考察对于图的连通性和欧拉路径的理解和求解。

题目描述

给定一张 $n$ 个节点, $m$ 条边的无向图,每一条边都有一个状态 $s_i$,初始状态为 $0$ 。现在你可以执行如下操作:

  1. 将第 $i$ 条边的状态取反,即 $s_i \gets 1-s_i$;
  2. 询问图中是否存在一个上面所有边状态都为1的简单路径 $u_1 \to u_2 \to \dots \to u_k$ 。

每个节点都有从 0 开始的编号 $0,1,\dots,n-1$。

输入格式

第一行包含两个整数 $n, m$。

接下来 $m$ 行,每行描述一条边,包含三个整数 $u,v,s$,表示一条连接 $u$ 和 $v$ 的无向边,边的初始状态为 $s$。

输出格式

对于每个询问,输出一行结果,如果存在符合要求的路径,输出 Y,否则输出 N。

样例输入
3 3
0 1 0
1 2 0
0 2 0
样例输出
N
提示

思路

由于需要考虑到路径的连通性和边的状态,而路径上的状态可以任意取反,这提示我们可以考虑用欧拉路径的性质来解决。

欧拉路径是指顺序穿过每条边恰好一次的路径,这种路径的典型问题是判定某图中是否存在欧拉路径。该问题可以通过判定每个点的度数奇偶性来判断。

欧拉路径提供了一种连通性较强的路径解决方案,但它并没有考虑到每条边的状态,我们需要对它进行修正。

考虑将每条边都看做是权值为 $0$ 或 $1$ 的边,初始状态为 $0$ 。 求得满足要求的一条欧拉路径之后,我们遍历这条路径上的每条边,将其状态取反,即 $s_i \gets 1-s_i$。 这样,在每次查询的时候,我们只需要判断图中是否存在一条欧拉路径即可,这样势必存在一条边状态全部为 $1$ 的路径。