题目来源:国庆出游

解题思路(下面是大神的写的):

把题目中的序列称作S,树称作T。那么对于S中的任意节点x,x的子孙节点如果在S出现的话,那么这个子孙节点的位置是有一定要求的:x的所有子孙节点在S中的位置都恰好紧跟在x的后面,没有被其他节点隔开。 设x的子孙节点是abcd,那么--xabcd--, --xbcda-- 等等是合法的,--xab-cd--, --axbcd--, --x--abcd--, 都是不合法的('-'指其他节点)。对于S中每个节点都做如上判断,如果有不合法的就输出NO,如果都合法就输出YES。

感谢两位大神gtdzxaprilzc,解题思路是gtdzx大神提供的,代码参考aprilzc大神的

具体算法(java版,可以直接AC)

 import java.util.Scanner;

 public class Main {
//判断child是否为father的子孙节点
public static boolean isAncestor(int[] tree, int father, int child) {
while (tree[child] != child) {
child = tree[child];//将child的父节点赋值给child
if (father == child)
return true;
}
return false;
} public static boolean judge(int[] tree, int[] array, int start, int end) {
if (start >= end)//所有节点都检查完了
return true;
int k = start + 1;//当前节点的下一个节点
//依次计算当前节点start后面的节点是否为它的子孙节点(这些节点必须是连续的)
while (k <= end && isAncestor(tree, array[start], array[k])) {
k++;
}
//如果后面所有的节点均是start的子孙节点
//说明该节点的已经通过检查,然后判断下一个当前节点(start+1)
if (k >= end) {
return judge(tree, array, start + 1, end);
}
int v = k + 1;
//判断后面的节点(除连续子孙节点外,k是第一个非连续子孙节点)
//是否为start的子孙节点,如果是,说明存在一个非连续的子孙节点,
//直接return false
while (v <= end) {
if (!isAncestor(tree, array[start], array[v])) {
return false;
}
v++;
} //start已经检查完了,用来判断后面的节点(start+1)
return judge(tree, array, start+1,end); //大神的最后一句代码如下:
//return judge(tree, array, start, k - 1) && judge(tree, array, k, end);
//个人觉得效果是一样的
} public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int T = scanner.nextInt();
for (int i = 0; i < T; i++) {
int n = scanner.nextInt();
int[] tree = new int[n + 1];
tree[1] = 1;
for (int j = 0; j < n - 1; j++) {
int father = scanner.nextInt();
int child = scanner.nextInt();
tree[child] = father;
}
int m = scanner.nextInt();
int[] array = new int[m];
for (int j = 0; j < m; j++) {
array[j] = scanner.nextInt();
}
if (judge(tree, array, 0, array.length - 1)) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
scanner.close();
}
}

hihoCoder 1041 国庆出游 最详细的解题报告的更多相关文章

  1. hihoCoder 1041 国庆出游 (DFS)

    题意: 小Hi和小Ho准备国庆期间去A国旅游.A国的城际交通比较有特色:它共有n座城市(编号1-n):城市之间恰好有n-1条公路相连,形成一个树形公路网.小Hi计划从A国首都(1号城市)出发,自驾遍历 ...

  2. hihocoder——1041国庆出游(搜索)

    描述 小Hi和小Ho准备国庆期间去A国旅游.A国的城际交通比较有特色:它共有n座城市(编号1-n):城市之间恰好有n-1条公路相连,形成一个树形公路网.小Hi计划从A国首都(1号城市)出发,自驾遍历所 ...

  3. hihoCoder 1037 数字三角形 最详细的解题报告

    题目来源:hihoCoder 1037 数字三角形 解题思路:请好好看看 提示一.提示二.提示三 具体算法(java版,可以直接AC) import java.util.Scanner; public ...

  4. hihoCoder 1040 矩阵判断 最详细的解题报告

    题目来源:矩阵判断 解题思路: 1.判断矩阵的4个点是否相连,一共输入8个点,只要判断是否4个点是否都经过2遍: 2.判断矩阵中任意一条边与其他边之间要么平行,要么垂直.设A(x1,y1),B(x2, ...

  5. hihoCoder 1039 字符消除 最详细的解题报告

    题目来源:字符消除 解题思路: 1.在给定字符串中的任意位置插入'A'.'B'.'C'中的任意一个字符,然后计算插入后的字符经过消除后最短的字符串长度: 2.在计算字符消除后最短长度时,智能一遍一遍的 ...

  6. 【hihoCoder】1041. 国庆出游

    问题:详见http://hihocoder.com/problemset/problem/1041 有n个城市,城市编号为1-n,城市间有n-1条路(所以,城市路网是一棵树).给定一个序列S,要求判断 ...

  7. hihoCoder 1114 小Hi小Ho的惊天大作战:扫雷·一 最详细的解题报告

    题目来源:小Hi小Ho的惊天大作战:扫雷·一 解题思路:因为只要确定了第一个是否有地雷就可以推算出后面是否有地雷(要么为0,要么为1,如果不是这两个值就说明这个方案行不通),如果两种可能中有一种成功, ...

  8. hihoCoder 1050 树中的最长路 最详细的解题报告

    题目来源:树中的最长路 解题思路:枚举每一个点作为转折点t,求出以t为根节点的子树中的‘最长路’以及与‘最长路’不重合的‘次长路’,用这两条路的长度之和去更新答案,最终的答案就是这棵树的最长路长度.只 ...

  9. hihoCoder 1052 基因工程 最详细的解题报告

    题目来源:基因工程 解题思路:假设基因序列长度为N,则需要计算基因序列前K个和后K个相同所需要的最少改变次数sum. 假设基因序列为 ATACGTCT (即M=8),K=6:interval=M-K= ...

随机推荐

  1. 短短1天我学会了如何修改Butterfly的配置文件

    目录 一.修改默认语言 二.创建标签.分类.关于和留言版页面 三.添加搜索框 四.飘带背景 五.使用Valine添加评论功能并支持邮箱提醒 六.收录谷歌.百度 一.修改默认语言 说明:安装Butter ...

  2. (十三)exec-maven-plugin配置及使用

    原文链接:https://www.cnblogs.com/lianshan/p/7358966.html 背景: 如果你想在项maven生命周期内,运行一段java代码,或者一段独立的程序,或者说我们 ...

  3. 单例模式的DCL方式,您不可不知道的知识点

    单例模式的DCL是一种比较好的单例实现方式,面试中被问及的频率非常高,考察的方式也多种多样.这里简单整理了一下,这里面的每一个点最好都能够做到烂熟于心: 1 public class Test { 2 ...

  4. 腾讯云Redis混合存储版重磅推出,万字长文助你破解缓存难题!

    导语 | 缓存+存储的系统架构是目前常见的系统架构,缓存层负责加速访问,存储层负责存储数据.这样的架构需要业务层或者是中间件去实现缓存和存储的双写.冷热数据的交换,同时还面临着缓存失效.缓存刷脏.数据 ...

  5. 事务的特性ACID、隔离级别

    1.事务特性ACID 1.1 事务的四大特性 1.原子性(Atomicity) 事务包装的一组sql,要么都执行成功,要么都失败.这些操作是不可分割的. 2.一致性(Consistency) 数据库的 ...

  6. ElasticSearch解决深度分页性能存在的问题使用scoll来解决

    现在我们全局搜索全部的数据,每次返回3条, 从 scroll 请求返回的结果反映了 search 发生时刻的索引状态,就像一个快照.后续的对文档的改动(索引.更新或者删除)都只会影响后面的搜索请求. ...

  7. SSM登录拦截验证

    /** * 登陆拦截器,用于后台管理系统拦截,判断用户是否登录 * @author ljy * @date 2015/8/19 */public class LoginForAdminIntercep ...

  8. C# MVC LayUI实现下拉框二级联动

    一.layui.use 1.LayUI的官方使用文档:https://www.layui.com/doc/ 2.layui的内置模块不是默认就加载好的,必须要执行启动模块的这种方法后模块才会加载: 3 ...

  9. html+css快速入门教程(1)

    1 HTML简介 1.1. 什么是HTML?(了解) HTML是超文本标记语言(HyperText Markup Language,HTML)的缩写.是标准通用标记语言(SGML Standard G ...

  10. 重学 Java 设计模式:实战状态模式「模拟系统营销活动,状态流程审核发布上线场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! @ 目录 一.前言 二.开发环境 三.状态模式介绍 四.案例场景模拟 1 ...