找出直系亲属

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1541    Accepted Submission(s): 621

Problem Description
如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A,B的grandchild,如果A,B是C的(外)曾祖父,曾祖母,则A,B是C的great-grandparent,C是A,B的great-grandchild,之后再多一辈,则在关系上加一个great-。
 
Input
输入包含多组测试用例,每组用例首先包含2个整数n(0<=n<=26)和m(0<m<50), 分别表示有n个亲属关系和m个问题, 然后接下来是n行的形式如ABC的字符串,表示A的父母亲分别是B和C,如果A的父母亲信息不全,则用-代替,例如A-C,再然后是m行形式如FA的字符串,表示询问F和A的关系。
当n和m为0时结束输入。
 
Output
如果询问的2个人是直系亲属,请按题目描述输出2者的关系,如果没有直系关系,请输出-。
具体含义和输出格式参见样例.
 
Sample Input
3 2
ABC
CDE
EFG
FA
BE
0 0
 
Sample Output
great-grandparent
-

这题真是醉了,有一个输出语句的循环少减了个1,WA一下午。
代码:

#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<stack>
#include<cmath>
#include<queue>
#include<set>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define MM(x) memset(x,0,sizeof(x))
#define MMINF(x) memset(x,INF,sizeof(x))
typedef long long LL;
const double PI=acos(-1.0);
const int N=1010;
struct info
{
int to;
int pre;
int w;
};
info E[N];
int cnt,head[N],vis[N];
int r;
inline void add(int s,int t,int dx)
{
E[cnt].to=t;
E[cnt].pre=head[s];
E[cnt].w=dx;
head[s]=cnt++;
}
void init()
{
memset(head,-1,sizeof(head));
cnt=0;
}
void dfsdown(int s,int t,int sum)
{
if(s==t)
{
r=sum;
return ;
}
for (int i=head[s]; i!=-1; i=E[i].pre)
{
int v=E[i].to;
if(!vis[v]&&E[i].w==-1)
{
vis[v]=1;
dfsdown(v,t,sum+E[i].w);
vis[v]=0;
}
}
}
void dfsup(int s,int t,int sum)
{
if(s==t)
{
r=sum;
return ;
}
for (int i=head[s]; i!=-1; i=E[i].pre)
{
int v=E[i].to;
if(!vis[v]&&E[i].w==1)
{
vis[v]=1;
dfsup(v,t,sum+E[i].w);
vis[v]=0;
}
}
}
int main(void)
{
int i,j,n,m;
char rela[5],quer[5];
while (~scanf("%d%d",&n,&m)&&(n||m))
{
init();
for (i=0; i<n; i++)
{
scanf("%s",rela);
if(rela[1]!='-')
{
add(rela[0]-'A',rela[1]-'A',1);
add(rela[1]-'A',rela[0]-'A',-1);
}
if(rela[2]!='-')
{
add(rela[0]-'A',rela[2]-'A',1);
add(rela[2]-'A',rela[0]-'A',-1);
}
}
for (i=0; i<m; i++)
{
r=INF;
scanf("%s",quer);
if(quer[0]==quer[1])
{
puts("-");
continue;
}
vis[quer[0]-'A']=1;
dfsdown(quer[0]-'A',quer[1]-'A',0);
vis[quer[0]-'A']=0;
if(r==INF)
{
vis[quer[0]-'A']=1;
dfsup(quer[0]-'A',quer[1]-'A',0);
vis[quer[0]-'A']=0;
if(r==INF)
puts("-");
else
{
if(r==1)
puts("child");
else if(r==2)
puts("grandchild");
else
{
for (j=0; j<r-2; j++)
printf("great-");
puts("grandchild");
}
}
}
else//子代关系
{
r=-r;
if(r==1)
puts("parent");
else if(r==2)
puts("grandparent");
else
{
for (j=0; j<r-2; j++)
printf("great-");
puts("grandparent");
}
}
}
}
return 0;
}

HDU——3786找出直系亲属(DFS+回溯)的更多相关文章

  1. 九度OJ 1035:找出直系亲属(二叉树)

    题目1035:找出直系亲属 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1309 解决:521 题目描述: 如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如 ...

  2. hdu3786 找出直系亲属 水题

    题意:找出直系亲属Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  3. HDU 1016 素数环(dfs + 回溯)

    嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 一道很典型的dfs+回溯: 根据题意首先进行初始化,即第一个位置为1,然后进行dfs, ...

  4. HDU - 4763 找出特殊规律的串

    在一个Text串中找出Pattern串E以满足EAEBE,A B可以是任意串 看一眼觉得woc好难,后来看一下样例AB为空也可以 找观察一下E既是前缀也是后缀,很容易联想到next 最优情况EEE,那 ...

  5. 九度OJ 1035:找出直系亲属 (二叉树、递归)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2380 解决:934 题目描述:     如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外) ...

  6. 九度oj 题目1035:找出直系亲属

    题目描述:     如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A,B的grandchild ...

  7. HDU 2181 哈密顿绕行世界问题(经典DFS+回溯)

    哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. HDU 1016 Prime Ring Problem(经典DFS+回溯)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  9. hdu1298 T9(手机输入法,每按一个数字,找出出现频率最高的字串,字典树+DFS)

    Problem Description A while ago it was quite cumbersome to create a message for the Short Message Se ...

随机推荐

  1. 将Android系统源码导入Android studio的方法

    Android源码目录结构如下: |-- Makefile|-- abi (applicationbinary interface,应用程序二进制接口,生成libgabi++.so相关库文件)|-- ...

  2. 安装AAA服务器遇到的问题

    安装升级AAA服务器的操作思路: 第一种:在原始服务器下更新升级安装包,实现升级: 第二种:重新安装最新版本的IOS,实现版本更新: 第一种方案更新AAS服务器ios 步骤1:copy软件更新包到li ...

  3. JBOSS默认连接池配置

    jboss5.0mysql连接配置 <?xml version="1.0" encoding="UTF-8"?> <!-- The Hyper ...

  4. NASM 之 helloworld1

    SECTION .data msg: db "Hello World!", 0x0a len: equ $-msg SECTION .text global _main kerne ...

  5. Python 输入输出 数据类型 变量

    python输入输出 数据类型 变量 输入输出 print()在Python3中是函数 >>>print('hello world') #print注意print前面不要有任何空格 ...

  6. eclipse 在写XML时 包类名自动提醒的问题

    需要加一个STS插件 配置很简单 参考了  https://blog.csdn.net/HH775313602/article/details/70176531 在 https://spring.io ...

  7. [BZOJ4899]:记忆的轮廓(概率DP)

    题目传送门 题目描述: 通往贤者之塔的路上,有许多的危机. 我们可以把这个地形看做是一颗树,根节点编号为1,目标节点编号为n,其中1-n的简单路径上,编号依次递增, 在[1,n]中,一共有n个节点.我 ...

  8. _IO_FILE

    hctf2017的babyprintf解法是house of orange,深入学习了一下,牵扯出许多知识,这里先进行第一步:_IO_FILE结构 0x00 _IO_FILE glibc-2.2.1\ ...

  9. Web服务器☞Apache VS Nginx

    Web服务器☞Apache VS Nginx LZ最近公司有一个项目在Web服务器选型上,在Apache和Nginx之间引起了一些讨论.这两者目前都是业内优秀的web服务器,都实现了HTTP1.1协议 ...

  10. Xcode 6 创建 Empty Application

    1.创建一个 Single View Application: 2.删除工程目录下的 Main.storyboard 和 LaunchScreen.xib: 3.打开 Supporting Files ...