时间限制: 1000ms
单点时限: 1000ms
内存限制: 256MB

描述

小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

看似简单的一题,但姿势不好很容易T

用了STL中的bitset,发现很好用。

一个发现:只要搜出规定顺序的路径即可,不必搜所有。

代码,参考了cxlove比赛提交的代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <functional>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
#include <ctime>
#pragma comment(linker, "/STACK:102400000,102400000")
typedef long long ll;
//typedef pair<int,int> pii;
#define INF 1e9
#define MAXN 10000
#define MAXM 100
const int maxn = 105;
const int mod = 1000003;
#define eps 1e-6
#define pi 3.1415926535897932384626433
#define rep(i,n) for(int i=0;i<n;i++)
#define rep1(i,n) for(int i=1;i<=n;i++)
#define scan(n) scanf("%d",&n)
#define scan2(n,m) scanf("%d%d",&n,&m)
#define scans(s) scanf("%s",s);
#define ini(a) memset(a,0,sizeof(a))
#define FILL(a,n) fill(a,a+maxn,n)
#define out(n) printf("%d\n",n)
//ll gcd(ll a,ll b) { return b==0?a:gcd(b,a%b);}
#define mk(n,m) make_pair(n,m)
using namespace std;
vector<int> G[maxn];
bitset<maxn> f[maxn]; //学会了bitset的用法,发现很好用
bool cango[maxn][maxn];
int a[maxn];
int n,m;
int now;
void dfs(int u,int fa)
{f[u][u] = 1;rep(i,(int)G[u].size()){int v = G[u][i];if(v == fa) continue;dfs(v,u);f[u] |= f[v];}
}
int c;
bool ok;
void solve(int u,int fa)
{if(c < m && a[c] == u ) c++;if(c == m) {ok = 1;return;}while(c < m){ //这个看似没用的循环很重要,充分利用了递归的性质int nex = a[c];int cur = c;rep(i,(int)G[u].size()){int v = G[u][i];if(v == fa) continue;if(f[v][nex] && cango[u][v]){cango[u][v] = 0;solve(v,u);break;}}if(c == cur) break; //表示以该节点为根的子树不存在目标点,跳出循环,(然后返回递归上一层)}
}
int main()
{
#ifndef ONLINE_JUDGE  freopen("in.txt","r",stdin);  //   freopen("out.txt","w",stdout);
#endifint T;cin>>T;while(T--){cin>>n;ini(cango);rep1(i,n){f[i].reset();G[i].clear();}rep(i,n-1){int u,v;scan2(u,v);G[u].push_back(v);G[v].push_back(u);cango[u][v] = cango[v][u] = 1;}cin>>m;rep(i,m) scan(a[i]);dfs(1,-1);c = 0;ok = 0;solve(1,-1);if(ok) puts("YES");else puts("NO");}return 0;
}

hihocoder 1041相关推荐

  1. hihocoder#1041 : 国庆出游(DFS)

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

  2. 1041. 考试座位号(15)

    1041. 考试座位号(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 每个PAT考生在参加考试时都会被分 ...

  3. hihoCoder 网络流四·最小路径覆盖

    题面带解释 hihoCoder感觉很好. 网络流的精华就是建图 #include<cstdio> #include<iostream> #include<algorith ...

  4. hihoCoder #1142 : 三分求极值

    #1142 : 三分·三分求极值 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 这一次我们就简单一点了,题目在此: 在直角坐标系中有一条抛物线y=ax^2+bx+c和一 ...

  5. hihocoder 后缀自动机专题

    一.后缀自动机基本概念的理解 1.首先后缀自动机的状态是由子串的endpos来决定的 子串的endpos是指一个子串可以在原字符串的哪些位置进行匹配, endpos构成的不同集合划分成不同的状态 关于 ...

  6. hihoCoder 1051 补提交卡(贪心,枚举)

    #1051 : 补提交卡 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序.100天过 ...

  7. hihoCoder week3 KMP算法

    题目链接 https://hihocoder.com/contest/hiho3/problems kmp算法 #include <bits/stdc++.h> using namespa ...

  8. hihoCoder 第136周 优化延迟(二分答案+手写堆)

    题目1 : 优化延迟 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho编写了一个处理数据包的程序.程序的输入是一个包含N个数据包的序列.每个数据包根据其重要程度不同 ...

  9. 【PAT (Advanced Level) Practice】1041 Be Unique (20 分)

    1041 Be Unique (20 分) Being unique is so important to people on Mars that even their lottery is desi ...

最新文章

  1. String.intern()方法JDK6与JDK7/JDK8不同
  2. FPGA之道(12)FPGA芯片的配置方式
  3. foreach遍历进阶_“枚举器“/GetEnumerator()方法
  4. Dubbo注解版配置
  5. 从0搭建一个Springboot+vue前后端分离项目(四)利用Element框架搭建页面主体部分表格与侧边栏
  6. java 编译 忽略错误_Maven在Java8下如何忽略Javadoc的编译错误详解
  7. Java与C++进行系统间交互:Protocol Buffer
  8. SDUTOJ2828_字典树
  9. python函数实例解析_python支持返回函数的实例解析
  10. springboot undertow替换tomcat方式
  11. Flickr.net傻瓜教程(三)--打造自己的图片搜索引擎
  12. vue-music 关于搜索历史本地存储
  13. WPF TreeView tools
  14. sqlite数据库语句和mysql的语句_【玩转SQLite系列】(一)初识SQLite,重拾sql语句
  15. 国内ERP技术公司综合
  16. 网页设计企业建站实例教程
  17. 【故障处理】ORA-12162: TNS:net service name is incorrectly specified
  18. 华硕路由 ac ax_【路由器】华硕网络开启802.11ax电竞生态
  19. xcode 配置wechat_Xcode 真机调试微信支付 提示 mainfest.json配置APPID和订单的appid 不一致...
  20. VS生成的解决方案exe文件在其他电脑显示缺失各种dll文件解决办法

热门文章

  1. 第一章 初步认识数据透视表
  2. LeetCode387号问题
  3. MySQL数据库实操教程(23)——数据库备份与还原
  4. GIS地理信息科学专业有哪些高校可以选择?
  5. 【Android应用开发技术:用户界面】界面导航设计
  6. 不小心按到了键盘,导致输入的英文字母间距很大,该怎么解决
  7. 如何给学生选择好的台灯?分享国AA级照度的护眼台灯
  8. 安卓动画的简单实现方法(Animation和AnimationDrawable)
  9. 传统产业数字化转型四个发展阶段
  10. H5网页元素和全局属性