AT_arc039_d [ARC039D] 旅行会社高橋君

题目描述

高桥君和你在 TK 国经营着一家名为 HS 公司的旅行社。TK 国是一个由 $N$ 个顶点和 $M$ 条边组成的连通简单无向图。每个顶点都被编号为 $1$ 到 $N$。 HS 公司为每位客户制定旅行计划并提供服务。此前,旅行计划都是手工精心制作的。然而,TK 国突然迎来了旅游热潮,所有时尚的年轻人都开始旅行。公司变得异常繁忙,最终不得不依赖计算机。 在 HS 公司,客户会指定起点、中转点和终点这三个顶点,公司需要提供一条从起点出发,经过中转点,最终到达终点的旅行计划。为了避免客户感到无聊,旅行计划不能重复经过同一条边,但可以多次经过同一个顶点。也就是说,旅行计划是一条从起点经过中转点到终点的“迹”(trail)。 你现在的任务是,编写一个程序,仅判断对于每位客户,是否存在这样的旅行计划。

输入格式

输入以如下格式从标准输入读入。 > $N$ $M$ > $X_1$ $Y_1$ > $X_2$ $Y_2$ > $\vdots$ > $X_M$ $Y_M$ > $Q$ > $A_1$ $B_1$ $C_1$ > $A_2$ $B_2$ $C_2$ > $\vdots$ > $A_Q$ $B_Q$ $C_Q$ - 第 $1$ 行包含两个整数 $N\ (3 \leq N \leq 100,000)$、$M\ (1 \leq M \leq 200,000)$,表示 TK 国的顶点数和边数。 - 接下来的 $M$ 行,每行包含两个整数 $X_i$、$Y_i$,表示第 $i$ 条边连接顶点 $X_i\ (1 \leq X_i \leq N)$ 和顶点 $Y_i\ (1 \leq Y_i \leq N)$。 - 第 $M+2$ 行包含一个整数 $Q\ (1 \leq Q \leq 100,000)$,表示需要判断旅行计划是否存在的客户人数。 - 接下来的 $Q$ 行,每行包含三个整数 $A_i$、$B_i$、$C_i$,表示第 $i$ 位客户指定的起点、中转点和终点分别为顶点 $A_i\ (1 \leq A_i \leq N)$、$B_i\ (1 \leq B_i \leq N)$、$C_i\ (1 \leq C_i \leq N)$。 - TK 国是连通图。 - TK 国是简单图,即不存在重边和自环。 - $A_i$、$B_i$、$C_i$ 互不相同。

输出格式

输出 $Q$ 行。对于第 $i$ 位客户,如果存在满足条件的旅行计划,则输出 `OK`,否则输出 `NG`。输出需写到标准输出,每行末尾需换行。

说明/提示

### 样例解释 1 下图展示了该输入下的 TK 国。 ![示意图](http://arc039.contest.atcoder.jp/img/arc/039/vn240wsdnl23fn4zd0i/D_sample1.png) 例如, - 对于第 $1$ 位客户,可以提供 $1-2-3$ 这样的旅行计划; - 对于第 $3$ 位客户,可以提供 $2-3-5-4-3$ 这样的旅行计划; - 对于第 $4$ 位客户,可以提供 $3-4-5$ 这样的旅行计划。 而对于第 $2$ 位客户,无法提供满足条件的旅行计划。 ### 样例解释 2 下图展示了该输入下的 TK 国。 ![示意图](http://arc039.contest.atcoder.jp/img/arc/039/vn240wsdnl23fn4zd0i/D_sample2.png) ### 样例解释 3 下图展示了该输入下的 TK 国。 ![示意图](http://arc039.contest.atcoder.jp/img/arc/039/vn240wsdnl23fn4zd0i/D_sample3.png) 由 ChatGPT 4.1 翻译