思路:将每个关系当成一条有向边,查询时就判断之间存在路径。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<map>
#define Maxn 210
using namespace std;
map<string,int> g;
map<string,int> ver;
int head[Maxn*],vi[Maxn*],e;
struct Edge{
int u,v,next;
}edge[Maxn*Maxn*];
void add(int u,int v){
edge[e].u=u,edge[e].v=v,edge[e].next=head[u],head[u]=e++;
}
bool dfs(int u,int x)
{
int i,v;
vi[u]=;
if(u==x)
return true;
for(i=head[u];i!=-;i=edge[i].next){
v=edge[i].v;
if(vi[v]) continue;
if(dfs(v,x))
return true;
}
return false;
}
int main()
{
char str[],s1[Maxn],s2[Maxn],s3[Maxn],s4[Maxn],s5[Maxn],s6[Maxn];
int cnt,num,i,j,t,Ca=,u,v;
scanf("%d",&t);
getchar();
while(t--){
cnt=;
memset(vi,,sizeof(vi));
memset(head,-,sizeof(head));
e=;
g.clear();
ver.clear();
printf("Case #%d:\n",++Ca);
while(cin.getline(str,,'\n')){
int l=strlen(str);
if(str[l-]=='!'){
printf("\n");
break;
}
num=sscanf(str,"%s %s %s %s %s %s",s1,s2,s3,s4,s5,s6);
if(num==){
l=strlen(s3);
if(s3[l-]=='.'){
s3[l-]='\0';
if(s2[]=='a'){
if(!g[s1]) g[s1]=++cnt;
if(!g[s3]) g[s3]=++cnt;
u=g[s1];
v=g[s3];
}else{
if(!g[s1]) g[s1]=++cnt;
if(!ver[s3]) ver[s3]=++cnt;
u=g[s1];
v=ver[s3];
}
add(u,v);
}
else{
s3[l-]='\0';
if(!g[s2]) g[s2]=++cnt;
u=g[s2];
if(s1[]=='a'){
if(!g[s3]) g[s3]=++cnt;
v=g[s3];
}
else{
if(!ver[s3]) ver[s3]=++cnt;
v=ver[s3];
}
memset(vi,,sizeof(vi));
if(dfs(u,v)){
printf("Y");
}else {
printf("M");
}
}
}
else{
l=strlen(s6);
if(s6[l-]=='.'){
s6[l-]='\0';
if(s5[]=='a'){
if(!ver[s4]) ver[s4]=++cnt;
if(!g[s6]) g[s6]=++cnt;
u=ver[s4];
v=g[s6];
}else{
if(!ver[s4]) ver[s4]=++cnt;
if(!ver[s6]) ver[s6]=++cnt;
u=ver[s4];
v=ver[s6];
}
add(u,v);
}
else{
s6[l-]='\0';
if(s1[]=='c'){
if(!ver[s5]) ver[s5]=++cnt;
if(!ver[s6]) ver[s6]=++cnt;
u=ver[s5];
v=ver[s6];
}
else {
if(!ver[s5]) ver[s5]=++cnt;
if(!g[s6]) g[s6]=++cnt;
u=ver[s5];
v=g[s6];
}
memset(vi,,sizeof(vi));
if(dfs(u,v)){
printf("Y");
}else {
printf("M");
}
}
}
}
}
return ;
}

hdu 4096 判断路径的更多相关文章

  1. shell 判断路径

    判断路径 ];then echo "找到了123" if [ -d /root/Desktop/text ] then echo "找到了text" else ...

  2. C# 判断路径和文件存在

    1.判断路径是否存在,不存在则创建路径: if (!System.IO.Directory.Exists(@"D:\Export")) { System.IO.Directory. ...

  3. git 判断路径是否是 git 仓库

    git 判断路径是否是 git 仓库 import subprocess repo_dir = "../path/to/check/" command = ['git', 'rev ...

  4. C# 判断路径是否存在

    定义文件状态枚举:0-路径为空,1-存在文件,2-路径不为空,但文件不存在 public enum FileExsitStatus { NoPath=0, FileExsit=1, NoFile=2 ...

  5. Python --判断路径是否为目录或文件

    os.path.isdir( ), os.path.isfile(),os.listdir( ), os.walk( ) 参考网址:https://blog.csdn.net/xxn_723911/a ...

  6. hdu 1756(判断点是否在多边形中)

    传送门 题解: 射线法判定点是否在多边形内部: AC代码: #include<iostream> #include<cstdio> #include<cmath> ...

  7. PAT甲题题解-1122. Hamiltonian Cycle (25)-判断路径是否是哈密顿回路

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789799.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  8. 【HDU】6110 路径交(2017百度之星) 线段树+RMQ-LCA+树链的交

    [题目]2017"百度之星"程序设计大赛 - 初赛(A) [题意]给定n个点的带边权树,m条编号1~m的路径,Q次询问编号区间[L,R]所有链的交集的长度.n<=500000 ...

  9. hdu 2108 Shape of HDU【判断多边形是否是凸多边形模板】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=2108 http://acm.hust.edu.cn/vjudge/contest/view.action ...

随机推荐

  1. 2017.12.1 如何用java写出一个菱形图案

    上机课自己写的代码 两个图形原理都是一样的 1.一共有仨个循环 注意搞清楚每一层循环需要做的事情 2.第一层循环:是用来控制行数 3.第二层循环控制打印空格数 4.第三层循环是用来循环输出星星 imp ...

  2. python_50_函数与函数式编程

    import time def logger(): """追加写""" time_format='%Y-%m-%d %X'#年-月-日 小时 ...

  3. python_32_文件操作1

    #目录里先创建一个yesterday文件 '''对文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 ''' print(open('yesterday',enc ...

  4. python_19_编码解码

    msg="我爱北京天安门" #字符串转成Byte类型 print(msg.encode())#encode 编码 print(msg.encode(encoding="u ...

  5. js打印div指定区域内容

    <script> function myPrint(obj){ var newWindow=window.open("打印窗口","_blank") ...

  6. 2018年ElasticSearch6.2.2教程ELK搭建日志采集分析系统(目录)

    章节一  2018年 ELK课程计划和效果演示 1.课程安排和效果演示 简介:课程介绍和主要知识点说明,ES搜索接口演示,部署的ELK项目演示 章节二 elasticSearch 6.2版本基础讲解到 ...

  7. Apache RocketMQ 正式开源分布式事务消息

    近日,Apache RocketMQ 社区正式发布4.3版本.此次发布不仅包括提升性能,减少内存使用等原有特性增强,还修复了部分社区提出的若干问题,更重要的是该版本开源了社区最为关心的分布式事务消息, ...

  8. 微信小游戏 demo 飞机大战 代码分析 (二)(databus.js)

    微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...

  9. 二、MySQL 管理

    MySQL 管理 启动及关闭 MySQL 服务器 Windows 系统下 在 Windows 系统下,打开命令窗口(cmd),进入 MySQL 安装目录的 bin 目录. 启动: cd c:/mysq ...

  10. yum安装报错

    检查了好久才知道原来是 sudo nano /etc/sysconfig/network-scripts/ifcfg-ens33 下的DNS配错了,改好之后,sudo service network ...