FZU 2057 家谱(dfs)
Accept: 129 Submit: 356
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
Input
输入数据第一行一个整数T表示有T组数据。
每组数据第一行一个正整数N (2 < N < 10000 ,且N为奇数),表示族谱中有N个家族成员。
接下来N/2行,每行三个整数a b c,表示a的父亲是b,a的母亲是c。数据保证所给的是一棵树,家族成员的编号为1到N。
接下来一行一个正整数M (0 < M < 100),表示有M询问。
接下来M行,每行两个整数x y (x!=y),表示询问x y的关系。
Output
对于每一个询问,输出一行。
若x是y的祖辈,则输出:
0 S
若y是x的祖辈,则输出:
1 S
若都不是以上两种情况,则输出:
Relative
前两种情况中的S表示一个由大写字母F和M组成的字符串,F表示父亲,M表示母亲,表示前者是后者的XXX。例如:
0 FMM 表示x是y的父亲的母亲的母亲。
1 MFMF 表示y是x的母亲的父亲的母亲的父亲。
以此类推。
Sample Input
9
3 6 7
5 8 9
1 2 3
2 4 5
3
8 2
1 7
3 9
Sample Output
1 MM
Relative
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#define REP(i,n) for(i=0;i<(n);++i)
#define FOR(i,n) for(i=1;i<=(n);++i)
using namespace std;
const int N = ;
typedef pair<int,int> pii; struct _node{
int fa,lc,rc;
char val;
}; _node mes[N];
int n,sz;
char ans[N]; void add(int f,int l,int r)
{
mes[f].lc = l;
mes[f].rc = r;
mes[l].fa = mes[r].fa = f;
mes[l].val = 'F';
mes[r].val = 'M';
} int dfs(int s,int t,int cur)
{
if(s==t)
{
ans[cur]='\0';
return cur;
}
int lc=mes[s].lc,rc=mes[s].rc,k;
if(lc)
{
ans[cur]='F';
if(k=dfs(lc,t,cur+)) return k;
}
if(rc)
{
ans[cur]='M';
if(k=dfs(rc,t,cur+)) return k;
}
return ;
} void run()
{
int a,b,c,m,k;
scanf("%d",&n);
memset(mes,,sizeof(mes));
for(int i=;i<=n/;++i)
{
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
}
scanf("%d",&m);
while(m--)
{
scanf("%d%d",&a,&b);
if(k=dfs(a,b,))
{
printf("1 %s\n",ans);
// print();
}
else if(k=dfs(b,a,))
{
printf("0 %s\n",ans);
}
else puts("Relative");
}
} int main()
{
int _;
scanf("%d",&_);
while(_--)
run();
return ;
}
FZU 2057 家谱(dfs)的更多相关文章
- F - Change FZU - 2277 (DFS序+线段树)
题目链接: F - Change FZU - 2277 题目大意: 题意: 给定一棵根为1, n个结点的树. 有q个操作,有两种不同的操作 (1) 1 v k x : a[v] += x, a[v ' ...
- FZU 2277 Change(dfs序+树状数组)
Problem Description There is a rooted tree with n nodes, number from 1-n. Root’s number is 1.Each no ...
- ACM: FZU 2107 Hua Rong Dao - DFS - 暴力
FZU 2107 Hua Rong Dao Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I6 ...
- ACM: FZU 2150 Fire Game - DFS+BFS+枝剪 或者 纯BFS+枝剪
FZU 2150 Fire Game Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
- FZU 2108(dfs模拟,大数取余)
K Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Pr ...
- 福州月赛2057 DFS
题意:告诉你族谱,然后Q条查询s和t的关系,妈妈输出M,爸爸输出F: 题目地址:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=78233# ...
- FZU 2176 easy problem (DFS序+树状数组)
对于一颗树,dfs遍历为每个节点标号,在进入一个树是标号和在遍历完这个树的子树后标号,那么子树所有的标号都在这两个数之间,是一个连续的区间.(好神奇~~~) 这样每次操作一个结点的子树时,在每个点的开 ...
- FZU 2150 Fire Game (bfs+dfs)
Problem Description Fat brother and Maze are playing a kind of special (hentai) game on an N*M board ...
- FZU oj 2277 Change 树状数组+dfs序
Problem 2277 Change Time Limit: 2000 mSec Memory Limit : 262144 KB Problem Description There is ...
随机推荐
- HDU 5343 MZL's Circle Zhou 后缀自动机+DP
MZL's Circle Zhou Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- 【BZOJ1604】[Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 Treap+并查集
[BZOJ1604][Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 Description 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000) ...
- wepy 实现 用户名登录与短信验证码登录
wepy 实现 用户名登录与短信验证码登录
- mysql系列之4.mysql字符集
针对mysql语句的临时办法: 先查看下mysql的各种编码设置情况, 如果结果显示有几项的编码不一致, 请先调整linux的系统编码 mysql> show variables like 'c ...
- 流畅python学习笔记:第十四章:迭代器和生成器
迭代器和生成器是python中的重要特性,本章作者花了很大的篇幅来介绍迭代器和生成器的用法. 首先来看一个单词序列的例子: import re re_word=re.compile(r'\w+') c ...
- Spring项目中使用jackson序列化key为对象Map
1.注入ObjectMapper2.注册类HistoricTaskInstance的序列化和反序列化类HistoricTaskInstanceKeySerializer,HistoricTaskIns ...
- 提高iOS开发效率的第三方框架等--不断更新中。。。
1. Mantle Mantle 让我们能简化 Cocoa 和 Cocoa Touch 应用的 model 层.简单点说,程序中经常要进行网络请求,请求到得一般是 json 字符串,我们一般会建一个 ...
- Android Weekly Notes Issue #317
July 8th, 2018 Android Weekly Issue #317 本期主要内容包括"重磅"的Udacity放弃RN(其实是因为他们RN写的那个Feature不要了) ...
- mysql修改初始密码
通过MySQL命令行,可以修改MySQL数据库的密码,下面就为您详细介绍该MySQL命令行,如果您感兴趣的话,不妨一看. 格式:mysqladmin -u用户名 -p旧密码 password 新密码 ...
- [acm]HDOJ 1200 To and Fro
题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=1200 简单字符串处理,找规律 /* 11509672 2014-08-21 11:32:55 Acc ...