P4334 [COI 2007] Policija

题目描述

为了帮助抓捕逃犯,警方引进了一套新的电脑系统。警察的辖区包含 $N$ 座城市和 $E$ 条双向道路,城市的编号是 $1\sim N$。 警察常常要抓住那些逃往另一个城市的罪犯。侦查员看着地图,试着确定在哪里设置路障。新的计算机系统要回答以下两种问题: 1. 考虑城市 $A$ 和 $B$,以及连接城市 $G_1$ 和 $G_2$ 的道路。罪犯能否在那条路不通的情况下从 $A$ 逃到 $B$? 2. 考虑三个城市 $A, B, C$。罪犯能否在无法通过 $C$ 的情况下从 $A$ 逃到 $B$? 写一个程序实现上述系统。

输入格式

第一行两个整数 $N, E$($2\leq N\leq 10 ^ 5$,$1\leq E\leq 5\times 10 ^ 5$),表示城市数量和道路数量。 接下来 $E$ 行,每行两个不同的数字 $u, v$,表示编号为 $u, v$ 的城市之间有一条道路。一对城市之间最多只有一条道路。 接下来一行,一个整数 $Q$($1\leq Q\leq 3\times 10 ^ 5$),表示询问数量。 接下来 $Q$ 行,每行四或五个整数描述一组询问。第一个数表示询问的类型 —— $1$ 或 $2$。 如果询问类型为 $1$,那么在同一行还有四个整数 $A, B, G_1, G_2$。$A, B$ 不同,且 $G_1, G_2$ 之间存在道路。 如果询问类型为 $2$,那么在同一行还有三个整数 $A, B, C$。$A, B, C$ 两两不同。 保证图中每两个点相互连通。

输出格式

对于每组询问,输出 `yes` 或 `no` 表示回答。

说明/提示

翻译自 [Croatian Olympiad in Informatics 2007 B Policija](https://hsin.hr/coci/archive/2006_2007/olympiad_tasks.pdf)。