描述

小Hi和小Ho准备国庆期间去A国旅游。A国的城际交通比较有特色:它共有n座城市(编号1-n);城市之间恰好有n-1条公路相连,形成一个树形公路网。小Hi计划从A国首都(1号城市)出发,自驾遍历所有城市,并且经过每一条公路恰好两次——来回各一次——这样公路两旁的景色都不会错过。

令小Hi苦恼的是他的小伙伴小Ho希望能以某种特定的顺序游历其中m个城市。例如按3-2-5的顺序游历这3座城市。(具体来讲是要求:第一次到达3号城市比第一次到达2号城市早,并且第一次到达2号城市比第一次到达5号城市早)。

小Hi想知道是否有一种自驾顺序满足小Ho的要求。

输入

输入第一行是一个整数T(1<=T<=20),代表测试数据的数量。

每组数据第一行是一个整数n(1 <= n <= 100),代表城市数目。

之后n-1行每行两个整数a和b (1 <= a, b <= n),表示ab之间有公路相连。

之后一行包含一个整数m (1 <= m <= n)

最后一行包含m个整数,表示小Ho希望的游历顺序。

输出

YES或者NO,表示是否有一种自驾顺序满足小Ho的要求。

样例输入

2
7
1 2
1 3
2 4
2 5
3 6
3 7
3
3 7 2
7
1 2
1 3
2 4
2 5
3 6
3 7
3
3 2 7

样例输出

YES
NO

巧妙的利用了二进制记录了每个节点的所有子节点。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<vector>
#include<bitset>
using namespace std;
#define MAX 111 int m, flag, tmp, order[MAX], tmap[MAX][MAX];
bitset<MAX> digit[MAX];
vector<int> q[MAX]; void work(int a, int v) //确定每个根节点下面有哪些节点
{
digit[a][a] = 1;
for(int i = 0; i < q[a].size(); i++)
{
int b = q[a][i];
if(b == v)
continue;
work(b, a);
digit[a] |= digit[b]; //巧妙的运用二进制实现
}
} void dfs(int a, int v)
{
if(a == order[tmp])
tmp++;
if(tmp == m) //如果已经走过了特定的m个点,返回
{
flag = 1;
return;
}
while(tmp < m)
{
int p = tmp;
int c = order[tmp];
for(int i = 0; i < q[a].size(); i++)
{
int b = q[a][i];
if(b == v)
continue;
if(digit[b][c] && tmap[a][b]) // 如果b下面有c 而且a b联通
{
tmap[a][b] = 0; //截断,防止重复走
dfs(b, a);
break;
}
}
if(p == tmp)
break;
}
} int main(void)
{
int a, b, i, t, n;
scanf("%d", &t);
while(t--)
{
flag = tmp = 0;
memset(tmap, 0, sizeof (tmap));
for(i = 0; i < MAX; i++)
{
digit[i].reset();
q[i].clear();
}
scanf("%d", &n);
for(i = 1; i < n; i++)
{
scanf("%d%d", &a, &b);
q[a].push_back(b);
q[b].push_back(a);
tmap[a][b] = tmap[b][a] = 1;
}
scanf("%d", &m);
for(i = 0; i < m; i++)
scanf("%d", &order[i]);
work(1, -1);
dfs(1, -1);
if(flag)
printf("YES\n");
else
printf("NO\n");
}
}

  

hihocoder——1041国庆出游(搜索)的更多相关文章

  1. hihoCoder 1041 国庆出游 最详细的解题报告

    题目来源:国庆出游 解题思路(下面是大神的写的): 把题目中的序列称作S,树称作T.那么对于S中的任意节点x,x的子孙节点如果在S出现的话,那么这个子孙节点的位置是有一定要求的:x的所有子孙节点在S中 ...

  2. hihoCoder 1041 国庆出游 (DFS)

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

  3. Hiho1041 国庆出游 搜索题解

    题目3 : 国庆出游 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi和小Ho准备国庆期间去A国旅游.A国的城际交通比較有特色:它共同拥有n座城市(编号1-n): ...

  4. 【hihoCoder】1041. 国庆出游

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

  5. hiboCoder 1041 国庆出游 dfs+思维

    先抽象出一棵以1做为根结点的树.给定了访问序列a[1..m]. 考虑两种特殊情况: 1.访问了某个a[j],但是存在a[i]没有访问且i < j,出现这种情况说明a[j]一定是a[i]的祖先节点 ...

  6. 国庆出游神器:魔幻黑科技换天造物,让vlog秒变科幻大片!

    摘要:国庆旅游景点人太多,拍出来的照片全是人人人.车车车,该怎么办?不妨试试这个黑科技,让你的出游vlog秒变科幻大片. 本文分享自华为云社区<国庆出游神器,魔幻黑科技换天造物,让vlog秒变科 ...

  7. [HIHO1041]国庆出游(DFS, bitset)

    题目链接:http://hihocoder.com/problemset/problem/1041 学会了用C++的bitset哈,可喜可贺.以后遇到超过64位想用位来表示状态就不愁了哈. 这题用bi ...

  8. HihoCoder1041 国庆出游 树形DP第四题

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

  9. hiho_1041 国庆出游

    题目 给定一棵树,N个节点,N - 1条边.给定m个节点,能否找出一种遍历方法,使得首次到达节点ai的时间小于首次到达节点aj的时间(i < j).且经过的路径上的每条边都最多走两遍 分析 我的 ...

随机推荐

  1. labview与单片机串口通信

    labview与单片机串口通信   VISA是虚拟仪器软件体系结构的缩写(即Virtual Instruments Software Architecture),实质上是一个I/O口软件库及其规范的总 ...

  2. 第一周-JAVA基本概念

    1. 本周学习总结 本周学习内容: 1.JAVA的发展 2.JDK,JVM,JRE, 3.掌握JAVA的组成结构 4.掌握使用简单的编译器写javac与java命令, 关键概念之间的联系: JVM:将 ...

  3. 【nodejs】安装browser-sync 遇到错误提示

    首先我用的是mac电脑在我执行安装browser-sync时遇到如下问题: 因为不被允许所以我只能不安装全局了: 但是又出现了如下的新问题 纠结了半个小时,终于知道为什么会出现这个问题了, node只 ...

  4. 增加Linux虚拟机的硬盘空间

    原配置为40G,现需要增加到60G,操作方法如下: 一.虚拟机关机,在编辑设置里调整硬盘空间到60G 二.虚拟机开机,扩展硬盘空间 1.安装gparted,命令如下 sudo apt-get inst ...

  5. unity A*寻路 (三)A*算法

    这里我就不解释A*算法 如果你还不知道A*算法 网上有很多简单易懂的例子 我发几个我看过的链接 http://www.cnblogs.com/lipan/archive/2010/07/01/1769 ...

  6. Linux下的Shell编程(2)环境变量和局部变量

    Shell Script是一种弱类型语言,使用变量的时候无需首先声明其类型. 局部变量在本地数据区分配内存进行存储,这个变量归当前的Shell所有,任何子进 程都不能访问本地变量.这些变量与环境变量不 ...

  7. Spring Security入门(3-9)Spring Security登录成功以后

  8. QT5.5与MYSQL5.6数据库连接的具体方法与实现

    由于毕设需要用到QT读取数据库中的数据,并将数据保存至数据库中.花了一天的时间,总算实现了从QT中读取数据库中的数据.网上相关资料很多,但是写得不是很全,中间出现了一些问题,解决起来比较麻烦.所以本文 ...

  9. 启动mongodb遇到的错:warning: 32-bit servers don't have journaling enabled by deflity

    执行修复:mongod --repair即可 正常关闭:killall mongod

  10. 喜马拉雅音频下载工具 - xmlyfetcher

    xmlyfetcher用于下载喜马拉雅歌曲资源,可以下载单个音频资源,也可以下载整个专辑. 项目地址:https://github.com/smallmuou/xmlyfetcher 安装 安装jsh ...