SDKD 14级组队练习赛(一) D 数组存储二叉树并递归遍历
来源:互联网 发布:linux cp命令 时间 编辑:程序博客网 时间:2024/05/17 03:06
由于计划生育的实行,我们以及将来几代人都会是独生子女,即每对夫妇只会有一个孩子。那么给你XXXX年某人的一张树形族谱,你能指出其中任意两人的关系吗?
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
193 6 75 8 91 2 32 4 538 21 73 9
Sample Output
0 MF
1 MM
Relative
1 MM
Relative
</pre><pre id="wmd-input" class="form-control font-rich has-selection" style="width:667px; height:463px; display:block"><span class="wmd-input-section" id="wmd-input-section-2"><span class="token p">这道题一开始用三个数组保存整个二叉树,后来发现用两个数组存下父母节点,然后反过来递归遍历就可。</span></span><pre class="sh-cpp sh-sourceCode" style="font-family:Courier New,Courier,monospace"><span class="sh-cbracket"></span><pre name="code" class="cpp">#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 10005;int n,m,qa,qb;int fa[maxn],ma[maxn];bool find_dfs(int pos,char *s,int l,int aim){ if(pos == 0) return false; if(pos == aim){ s[l] = '\0'; return true; } s[l] = 'F'; if(find_dfs(fa[pos],s,l + 1,aim)) return true; s[l] = 'M'; if(find_dfs(ma[pos],s,l + 1,aim)) return true; return false;}int main(){ int T; char s[maxn]; //freopen("in.txt","r",stdin); scanf("%d",&T); while(T--){ scanf("%d",&n); memset(fa,0,sizeof(fa)); memset(ma,0,sizeof(ma)); for(int i = 0; i < n / 2; i++){ int a,b,c; scanf("%d%d%d",&a,&b,&c); fa[a] = b; ma[a] = c; } scanf("%d",&m); for(int i = 0; i < m; i++){ scanf("%d%d",&qa,&qb); if(find_dfs(qa,s,0,qb)){ printf("1 %s\n",s); } else if(find_dfs(qb,s,0,qa)){ printf("0 %s\n",s); } else printf("Relative\n"); } } return 0;}
0 0
- SDKD 14级组队练习赛(一) D 数组存储二叉树并递归遍历
- SDKD 14级组队练习赛(一) J 递归打印图案
- 数组存储到二叉树并前序中序后序遍历
- 二叉树(一)利用数组初始化二叉树,并实现前序中序后序遍历
- 二叉树用数组顺序存储(完全二叉树)并实现三种遍历,代码详解!!!
- 构建二叉树并实现递归遍历
- 二叉树遍历(递归)
- 二叉树数组顺序存储与遍历
- 二叉树遍历(递归,非递归)
- 二叉树的遍历 -前中后--递归非递归 --链表,数组
- 二叉树的遍历(递归遍历)
- 二叉树的非递归中序遍历(二叉线索存储结构)
- 用二叉链表存储结构构造一棵二叉树,然后用栈结构进行非递归遍历
- 先序遍历中序遍历后序遍历确定一棵二叉树(递归、非递归)
- 二叉树递归练习
- 【算法学习笔记】10.数据结构基础 二叉树初步练习3(遍历与递归复习)
- 二叉树遍历(递归、非递归、Morris遍历)
- 二叉树遍历(递归、非递归、Morris遍历)
- 项目0:是春哥啊
- 职业规划
- java object之clone
- Android之Volley
- leetcode第十四题(easy)——Longest Common Prefix
- SDKD 14级组队练习赛(一) D 数组存储二叉树并递归遍历
- floyd算法
- Java基础-Class类
- MySQL与Oracle 数据类型比较
- setTimeout()中函数加双引号和不加有什么区别?
- 社説 20150517 米軍オスプレイ 横田配備で即応力が向上する
- 详解 /etc/group
- 设备IO之一(mmap、直接IO以及异步IO)
- 临时解决windows 时间变成了nn 分钟