Freda的迷宫

Freda的迷宫

Freda是一个迷宫爱好者,她利用业余时间建造了许多迷宫。每个迷宫都是由若干房间和走廊构成的,每条走廊都连接着两个不同的房间,两个房间之间最多只有一条走廊直接相连,走廊都是双向通过。
黄昏时候,Freda喜欢在迷宫当中漫步。每天,Resodo都会为Freda设计一个挑战方案。Resodo会指定起点和终点,请Freda来找到一条从起点到终点的简单路径。一条简单路径定义为一个房间序列,每个房间至多在序列里出现一次,且序列中相邻的两个房间有走廊相连。当起点和终点之间存在且仅存在一条简单路径的时候,Freda认为这个挑战方案是RD的。现在,请你帮帮Resodo来写一个程序,判断一个挑战方案是否是RD的。

Input

第一行三个整数N,M,Q.分别表示房间数,走廊数,询问数。
接下来M行每行2个整数x,y, 0<x,y<=N, 表示x和y之间有一条走廊相连。
接下来Q行每行2个整数x,y, 表示询问以x为起点,y为终点的挑战方案是否是RD的.

Output

对于每个询问,输出一行”Y”或者”N”(不含引号).Y表示该询问所表示的挑战方案是RD的,N表示该询问所表示的挑战方案不是RD的.

Sample Input

6 5 3

1 2

2 3

2 4

2 5

4 5

1 3

1 5

2 6

Sample Output

Y

N

N

思路:

简单tarjan

\(\mathfrak{Talk\ is\ cheap,show\ you\ the\ code.}\)

#include<map>
#include<cstdio>
#include<queue>
#include<bitset>
#include<vector>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
# define Type template<typename T>
# define read read1<int>()
Type inline T read1()
{
    T t=0;
    char k;
    bool fl=0;
    do k=getchar(),(k=='-')&&(fl=1);while('0'>k||k>'9');
    while('0'<=k&&k<='9')t=(t<<3)+(t<<1)+(k^'0'),k=getchar();
    return fl?-t:t;
}
struct re{Type re operator >> (T &a){a=read1<T>();return *this;}}re;
# define fre(k) freopen(k".in","r",stdin);freopen(k".ans","w",stdout)
vector<int>G[10001];
int s,m,q,t,dfn[10001],low[10001],f[10001];
int Find(int n){if(f[n]==n)return n;return f[n]=Find(f[n]);}
void Merge(int u,int v){f[Find(u)]=Find(v);}
void dfs(int n,int fa){
    dfn[n]=low[n]=++t;
    for(int i=0;i<G[n].size();++i)
        if(G[n][i]!=fa)
            if(!dfn[G[n][i]]){
                dfs(G[n][i],n);
                low[n]=min(low[n],low[G[n][i]]);
                if(dfn[n]<low[G[n][i]])Merge(G[n][i],n);
            }
            else low[n]=min(low[n],dfn[G[n][i]]);
}
int main(){
    s=read,m=read,q=read;
    for(int i=0;i<m;++i){
        int u=read,v=read;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    for(int i=1;i<=s;++i)f[i]=i;
    for(int i=1;i<=s;++i)
        if(!dfn[i])dfs(i,0);
    for(int i=1;i<=q;++i)
        puts(Find(read)==Find(read)?"Y":"N");
    return 0;
}
posted @ 2020-03-03 10:51  ファイナル  阅读(153)  评论(0)    收藏  举报