Freda的迷宫


  • Description

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

  • Input Format

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

  • Output Format

对于每个询问,输出一行”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

  • Hint

【样例解释】
1,3之间只有一条路径 1->2->3
1,5之间有两条路径 1->2->5 ; 1->2->4->5
1,6之间没有路径
【数据范围与约定】
对于30%的数据,N<=100, M<=1000, Q<=100.
对于50%的数据,N<=1000, M<=10000, Q<=1000.
对于100%的数据,N<=10000, M<=100000, Q<=10000.


  • 分析

因为两点之间有且仅有一条简单路径,所以路径上的边都是桥。若有不为桥的边,我们一定可以找到另一条路径连接不为桥的边的两个结点。
我们可以先预处理找出桥有哪些,然后把所有桥用一个并查集记录一下,或者重新一张图。对于每个询问只需找找他们在并查集里是否有相同的父亲,或者在新图里是否联通。


#include <queue>
#include <stack>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int Tarjan_Time,n,m,q,u,v,tot,last[10004],Low[10004],Dfn[10004],Father[10004];
struct Data{int to,next;}E[2000056];
void addline(int u,int v){E[++tot].to=v; E[tot].next=last[u]; last[u]=tot;E[++tot].to=u; E[tot].next=last[v]; last[v]=tot;
}
int GetFather(int x){return x==Father[x]?x:Father[x]=GetFather(Father[x]);}
int Tarjan(int fa,int u){Dfn[u]=Low[u]=++Tarjan_Time;for (int i=last[u];i;i=E[i].next){int v=E[i].to;if (!Dfn[v]){Low[u]=min(Low[u],Low[v]=Tarjan(u,v));if (Low[v]>Dfn[u]){int Fu=GetFather(u),Fv=GetFather(v);if (Fu!=Fv) Father[Fu]=Fv;}}else if (Dfn[v]<Dfn[u] && v!=fa) Low[u]=min(Low[u],Dfn[v]);}return Low[u];
}
int main(){freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);scanf("%d%d%d",&n,&m,&q);for (int i=1;i<=n;i++) Father[i]=i;for (int i=1;i<=m;i++){scanf("%d%d",&u,&v);addline(u,v);}Tarjan(0,1);for (int i=1;i<=q;i++){scanf("%d%d",&u,&v);int Fu=GetFather(u),Fv=GetFather(v);if (Fu==Fv) printf("Y\n");else printf("N\n");}fclose(stdin); fclose(stdout);return 0;
}

【Tyvj1922】Freda的迷宫相关推荐

  1. [3.3训练赛]One-Dimensional(矩阵快速幂),Freda的迷宫(无向图强连通分量+并查集),一道防AK好题

    文章目录 T1:One-Dimensional title solution code T2:[NOIP模拟赛]Freda的迷宫 title solution code T3:[NOIP模拟赛]一道防 ...

  2. COGS 1043. [Clover S2] Freda的迷宫

    ★   输入文件:mazea.in   输出文件:mazea.out   简单对比 时间限制:1 s   内存限制:128 MB Freda 的迷宫 义为一个房间序列,每个房间至多在序列里出现一次,且 ...

  3. [JS][dfs]题解 | #迷宫问题#

    题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...

  4. hdu 1272 小希的迷宫

    Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该 ...

  5. C语言通路寻找,用C语言解决迷宫问题设计与寻找通路问题.pdf

    用c语言解决迷宫设计与寻找通路问题 摘 要:本课程设计主要解决设计一个迷宫以及在给出一组入口和出口的情况下,求出一条通路的问题.在课程 设计中,程序设计语言采用VisualC++6.0,数据结构采用顺 ...

  6. java栈 迷宫_利用栈实现迷宫的求解

    问题描述:这时实验心理学中的一个典型的问题,心理学家吧一只老鼠从一个无顶的大盒子的入口处赶进迷宫.迷宫设置很多隔壁,对前进方向形成了许多障碍,心理学家在迷宫的唯一出口处放置了一块奶酪,吸引老鼠仔迷宫中 ...

  7. python迷宫问题求最短路径_用栈求解迷宫问题的所有路径及最短路径程序

    目的:能将栈运用的更为熟练 实验内容:求解迷宫问题程序,要求输出如图所示的迷宫的路径,并求出第一条最短路径的长度以及最短路径. 设计的算法功能: mgpath(int xi,int yi,int xe ...

  8. 用栈、回溯算法设计迷宫程序

    目录 1.走迷宫与回溯算法 2.迷宫设计栈扮演的角色 3.Python实现走迷宫 栈的应用有许多,本篇博文着重将栈与回溯(Backtracking)算法结合,设计走迷宫程序.其实回溯算法也是人工智能的 ...

  9. 不相交集类以及应用迷宫生成

    简单介绍: 考虑一个迷宫的生成,一个简单算法就是从各处的墙壁开始(除入口和出口之外).此时,不断地随机选择一面墙,如果被该墙分割的单元彼此不联通,那么就把这面墙拆掉.重复这个过程直到开始单元和终止单元 ...

最新文章

  1. React.js 小书 Lesson5 - React.js 基本环境安装
  2. 缺少glibc指定版本的解决方案
  3. TensorFlow学习笔记(七)feeds操作
  4. 使用C#进行系统编程
  5. JSBridge实战
  6. DAYDREAM和VIVE平台的框架API
  7. Caffe编译 Mnist训练测试---基本参数学习
  8. c语言 队列方法的编写
  9. python安装不了whl文件_python怎样安装whl文件
  10. python爬虫脚本 初级入门爬虫英雄联盟所有皮肤_用Python爬取英雄联盟(lol)全部皮肤...
  11. 计算机毕业设计ssm农贸市场摊位管理系统c22ux系统+程序+源码+lw+远程部署
  12. TOEFL wordlist 14
  13. SwiftUI应用开屏广告界面项目(一)
  14. 快速响应 智慧应急|大势智慧亮相第三届武汉国际安全应急博览会
  15. Socks代理上网工具 tsocks
  16. 大学计算机基础模拟试题
  17. 二皮脸data_2022年网络我的网络爬虫学习心得
  18. Flutter plugin not installed; this adds Flutter specific functionality.
  19. indesign排版标点挤压_用indesign排版,一本书中,用同一种标点挤压设置,前面部分是对齐的,后面的不知道对不齐是怎么回事啊?????...
  20. java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification

热门文章

  1. Ext3、Ext4、FAT、FAT32、NTFS、exFAT、Sparse、Raw
  2. Linux利用platform_driver和设备树实现PWM驱动
  3. 优惠券制作和分配(含代码)
  4. linux中C语言获取高精度时钟gettimeofday函数
  5. java一系列图片加载_RxJava系列文章(一) - 网络图片加载水印一般写法
  6. 网易云音乐工程师,亲自揭晓评论实现技术!| 技术头条
  7. python匿名函数Lambda的两种用法
  8. autocad.net 画多段线_AutoCAD2016绘制多段线图文教程
  9. 想不想修真鸿蒙源液有什么用,想不想修真初代小世界怎么玩_想不想修真初代小世界玩法介绍_玩游戏网...
  10. zTree 异步删除节点操作