hdu 4096 判断路径
思路:将每个关系当成一条有向边,查询时就判断之间存在路径。
#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 判断路径的更多相关文章
- shell 判断路径
判断路径 ];then echo "找到了123" if [ -d /root/Desktop/text ] then echo "找到了text" else ...
- C# 判断路径和文件存在
1.判断路径是否存在,不存在则创建路径: if (!System.IO.Directory.Exists(@"D:\Export")) { System.IO.Directory. ...
- git 判断路径是否是 git 仓库
git 判断路径是否是 git 仓库 import subprocess repo_dir = "../path/to/check/" command = ['git', 'rev ...
- C# 判断路径是否存在
定义文件状态枚举:0-路径为空,1-存在文件,2-路径不为空,但文件不存在 public enum FileExsitStatus { NoPath=0, FileExsit=1, NoFile=2 ...
- Python --判断路径是否为目录或文件
os.path.isdir( ), os.path.isfile(),os.listdir( ), os.walk( ) 参考网址:https://blog.csdn.net/xxn_723911/a ...
- hdu 1756(判断点是否在多边形中)
传送门 题解: 射线法判定点是否在多边形内部: AC代码: #include<iostream> #include<cstdio> #include<cmath> ...
- PAT甲题题解-1122. Hamiltonian Cycle (25)-判断路径是否是哈密顿回路
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789799.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- 【HDU】6110 路径交(2017百度之星) 线段树+RMQ-LCA+树链的交
[题目]2017"百度之星"程序设计大赛 - 初赛(A) [题意]给定n个点的带边权树,m条编号1~m的路径,Q次询问编号区间[L,R]所有链的交集的长度.n<=500000 ...
- hdu 2108 Shape of HDU【判断多边形是否是凸多边形模板】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=2108 http://acm.hust.edu.cn/vjudge/contest/view.action ...
随机推荐
- flex在众多手机浏览器上的兼容方案(亲测华为手机自带浏览器)
如果项目使用构建工具,可加autoprefixer来处理,[autoprefixer使用指南] 纯手写css兼容代码,需给每个使用的属性加上属性前缀 /*display: flex;写法*/ span ...
- DongDong坐飞机
题目连接:https://ac.nowcoder.com/acm/contest/904/D 第一次研究了一下这种题型,还是比较好理解的,因为有半价次数的限制,所以要把每一中情况都写出来,dp[现在的 ...
- 升级win10后电脑经常自动重启的问题
升级win10后用户体验度确实比win7强了很多,但是电脑无故的重启,让人无法接受,下面就介绍win10电脑自动重启问题的解决方案 问题分析: 遇到这种情况主要是硬件与系统不兼容所致 解决方案: 1, ...
- JS控制台的使用
1.快捷键F12可直接进入控制台(或者单机右键->检查)用于bug调试 2.控制台如图: Elements:表示所有的js元素 Console:常用的有如下几个功能: ①console.log: ...
- 定位设备--llseek实现
/** 如果llseek实现lseek和llseek系统调用,如果未定义llseek方法, 内核默认修改file结构体中的f_pos成员来实现定位,如果是操作一个 设备,则需提供自己的llseek方法 ...
- read指令使用方法
read命令用于从标准输入中读取输入单行,并将读取的单行根据IFS变量分裂成多个字段,并将分割后的字段分别赋值给指定的变量列表var_name.第一个字段分配给第一个变量var_name1,第二个字段 ...
- centos下修改docker连接docker_host默认方式为tls方式
1.安装docker,请参考官网文档 centos下安装docker 2.安装完成应该可以使用docker的各种命令连接docker host.docker host运行在本机上,但与localhos ...
- java抓取12306火车余票信息
最近在弄一个微信的公众帐号,涉及到火车票查询,之前用的网上找到的一个接口,但只能查到火车时刻表,12306又没有提供专门的查票的接口.今天突然想起自己直接去12306上查询,抓取查询返回的数据包,这样 ...
- LeetCode949-给定数字能组成的最大时间
问题: 给定一个由 4 位数字组成的数组,返回可以设置的符合 24 小时制的最大时间. 最小的 24 小时制时间是 00:00,而最大的是 23:59.从 00:00 (午夜)开始算起,过得越久,时间 ...
- 一道JS面试题所引发的"血案",透过现象寻本质,再从本质看现象
觉得本人写的不算很烂的话,可以登录关注一下我的GitHub博客,新手写东西写的不好之处,还望见谅,毕竟水平有限,写东西只为交流提高,一起学习,还望大神多加指点,指出纰漏,和提出宝贵的意见,博客会坚持写 ...