(HihoCoder - 1041)国庆出游
2017-09-06 13:09
507 查看
(HihoCoder - 1041)国庆出游
小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的要求。
Input
输入第一行是一个整数T(1<=T<=20),代表测试数据的数量。每组数据第一行是一个整数n(1 <= n <= 100),代表城市数目。
之后n-1行每行两个整数a和b (1 <= a, b <= n),表示ab之间有公路相连。
之后一行包含一个整数m (1 <= m <= n)
最后一行包含m个整数,表示小Ho希望的游历顺序。
Output
YES或者NO,表示是否有一种自驾顺序满足小Ho的要求。Sample Input
27
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
Sample Output
YESNO
思路:看到很多人做这题都用到了bitset,而作为渣渣的我根本不知道什么是bitset(以后估计会看一下吧),所以就用了最一般的方法。首先dfs预处理出每个结点的深度和它的父亲结点,然后根据题目要求的的顺序去走,如果有一个结点走过2次以上就不符合题意。
#include<cstdio> #include<vector> #include<cstring> using namespace std; const int maxn=105; bool vis[maxn]; int num[maxn]; int a[maxn],dep[maxn],fa[maxn]; int n,m; vector<int> edge[maxn]; void dfs(int u,int d) { dep[u]=d; vis[u]=1; for(int i=0;i<edge[u].size();i++) { int v=edge[u][i]; if(!vis[v]) { fa[v]=u; dfs(v,d+1); } } } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++) edge[i].clear(); for(int i=0;i<n-1;i++) { int u,v; scanf("%d%d",&u,&v); edge[u].push_back(v); edge[v].push_back(u); } scanf("%d",&m); for(int i=1;i<=m;i++) scanf("%d",a+i); a[0]=1; memset(vis,0,sizeof(vis)); dfs(1,1); memset(num,0,sizeof(num)); bool flag=true; for(int i=1;i<=m;i++) { int u=a[i-1],v=a[i]; if(dep[u]>dep[v]) swap(u,v); while(dep[u]<dep[v]) { if(num[v]==2) { flag=false; break; } num[v]++; v=fa[v]; } while(u!=v) { if(num[u]==2||num[v]==2) { flag=false; break; } num[u]++; num[v]++; u=fa[u]; v=fa[v]; } } if(flag) printf("YES\n"); else printf("NO\n"); } return 0; }
相关文章推荐
- hihocoder——1041国庆出游(搜索)
- hihoCoder 1041 : 国庆出游 (dfs+bitset 很不错的题!)
- hihocoder——1041国庆出游(搜索)
- B - 国庆出游 HihoCoder - 1041
- hihocoder 1041 国庆出游
- 【hihoCoder】1041. 国庆出游
- hihocoder 1041 国庆出游 dfs
- hihoCoder 1041 国庆出游
- [HihoCoder]#1041 : 国庆出游
- hihocoder 1041 国庆出游 (DFS + bitset 好题)
- 国庆出游 HihoCoder - 1041
- HihoCoder - 1041: 国庆出游(dfs、邻接表)
- hihoCoder 1041 国庆出游 (DFS)
- hihoCoder1041—国庆出游(搜索好题)
- HihoCoder1041 国庆出游 树形DP第四题
- hihoCoder--1041 国庆出游(dfs + bitset)
- [HIHO1041]国庆出游(DFS, bitset)
- hihocoder #1041 : 国庆出游
- hihocoder#1041之国庆出游
- hihocoder #1041 : 国庆出游 (DFS)