Codefroces 1328E Tree Querie

题目

给出一棵1为根,n个节点的树,每次询问\(k_i\) 个节点,问是否存在这样一条路径:

  • 从根出发,且每个节点在这条路径上或者距离路径的距离为1

题解

由于是从根出发的路径,所以

  1. 距离这条路径的距离为1=这个点的父亲在路径上
  2. 本身就在根出发的这条路径上,当然这个点的父亲也在路径上

这样我们就把两个条件统一了,转化问题为:

是否存在一条从根出发的路径,使所有点都在这条路径上

根据从根出发的路径的特点,我们根据深度,从小到大排序,每次看后一个点是否在前一个节点的子树中就可以了

判断是否在子树中是非常经典的dfs序应用问题,先dfs一遍求出dfs序即可

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+100;
int head[maxn],cnt,vis[maxn],dep[maxn],L[maxn],R[maxn],xu,fa[maxn];
struct E
{
int nxt,to;
}edge[maxn*2+10];
struct P
{
int dep,id;
}a[maxn];
bool cmp(P x,P y)
{
return x.dep<y.dep;
}
void add_edge(int x,int y)
{
edge[++cnt].nxt=head[x];
edge[cnt].to=y;
head[x]=cnt;
}
void dfs(int x,int F)
{
L[x]=++xu;
for(int i=head[x];i;i=edge[i].nxt){
int v=edge[i].to;
if(v==F) continue;
dep[v]=dep[x]+1;
fa[v]=x;
dfs(v,x);
}
R[x]=xu;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
add_edge(x,y);
add_edge(y,x);
}
fa[1]=1;
dep[1]=1;
dfs(1,0);
for(int i=1;i<=m;i++){
int x;
scanf("%d",&x);
for(int j=1;j<=x;j++){
int y;
scanf("%d",&y);
a[j].id=fa[y];
a[j].dep=dep[a[j].id];
}
sort(a+1,a+x+1,cmp);
int Top=a[1].id;
int flag=1;
for(int j=2;j<=x;j++){
int v=a[j].id;
if(L[Top]<=L[v]&&L[v]<=R[Top]){
Top=v;
}
else{
flag=0;
break;
}
}
if(flag==1){
printf("YES\n");
}
else{
printf("NO\n");
}
}
}

Codefroces 1328E Tree Querie(dfs序)的更多相关文章

  1. Codeforces 343D Water Tree(DFS序 + 线段树)

    题目大概说给一棵树,进行以下3个操作:把某结点为根的子树中各个结点值设为1.把某结点以及其各个祖先值设为0.询问某结点的值. 对于第一个操作就是经典的DFS序+线段树了.而对于第二个操作,考虑再维护一 ...

  2. Codeforces 620E New Year Tree(DFS序 + 线段树)

    题目大概说给一棵树,树上结点都有颜色(1到60),进行下面两个操作:把某结点为根的子树染成某一颜色.询问某结点为根的子树有多少种颜色. 子树,显然DFS序,把子树结点映射到连续的区间.而注意到颜色60 ...

  3. Codeforces Round #316 (Div. 2) D. Tree Requests dfs序

    D. Tree Requests time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  4. POJ3321 Apple Tree(DFS序)

    题目,是对一颗树,单点修改.子树查询.典型的dfs序入门题. DFS序可以将一颗树与子树们表示为一个连续的区间,然后用线段树来维护:感觉算是树链剖分的一种吧,和轻重链剖分不同的是这是对子树进行剖分的. ...

  5. POJ3321/Apple tree/(DFS序+线段树)

    题目链接 Apple Tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9692 Accepted: 3217 Descr ...

  6. poj3321-Apple Tree(DFS序+树状数组)

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 36442   Accepted: 10894 Desc ...

  7. Codeforces 570D TREE REQUESTS dfs序+树状数组 异或

    http://codeforces.com/problemset/problem/570/D Tree Requests time limit per test 2 seconds memory li ...

  8. 【bzoj1803】Spoj1487 Query on a tree III DFS序+主席树

    题目描述 You are given a node-labeled rooted tree with n nodes. Define the query (x, k): Find the node w ...

  9. CoderForces343D:Water Tree(dfs序+线段树&&特殊处理)

    Mad scientist Mike has constructed a rooted tree, which consists of n vertices. Each vertex is a res ...

随机推荐

  1. Python Flask后端异步处理(二)

    在实际的应用场景中,如用户注册,用户输入了注册信息后,后端保存信息到数据库中,然后跳转至登录界面,这些操作用户需要等待的时间非常短,但是如果是有耗时任务,比如对输入的网址进行漏洞扫描,在后端处理就会花 ...

  2. python基本案例实现

    案例一:test.txt文件中与输入的用户进行认证,超过3次用户被锁定,且把用户加入锁定的lock.txt文件中. # 需求点: # 1.输入用户名.密码 # 2.认证成功后显示欢迎信息 # 3.输错 ...

  3. js 面试题正则相关

    正则相关[i不区分大小写,g匹配全部数据] var str = "Hello word! I think word is good."; 1.替换str中的word为javascr ...

  4. 2020 AC Saber夏季赛 游记

    看着 \(\text{Acwing}\) 成长的我,还是写一下游记吧(?). 刚刚中考完,手速本来就老年,更慢,算法每次写完都要调,而且还查不出错.. Day 1 初赛.紧张,因为中考四五个月没打了, ...

  5. ajax与浏览器请求的差异对比.png

  6. 一个最简单的typescript工程

    初级: 1.新建一个文件夹~/a/ 2.cd ~/a/ 3.npm init -y          生成package.json 4.新建index.ts,内容:console.log(" ...

  7. mysql主从双机keepalived配置

    1.关闭selinux SELINUX=disabled 2.yum安装keepalived yum install -y keepalived 3.修改配置文件 主库配置文件: ! Configur ...

  8. oracle归档空间不足的问题(rman删除归档日志)

    案例一:归档日志满,数据库用户无法登陆,业务异常   解决方案一(可以登录rman): rman target /   RMAN> crosscheck archivelog all;   RM ...

  9. JavaSE16-集合·其三

    1.Map集合 1.1 Map集合概述和特点 1 interface Map<K,V> K:键的类型:V:值的类型 Map集合的特点 键值对映射关系 一个键对应一个值 键不能重复,值可以重 ...

  10. 网站开发学习Python实现-Django学习-总结(6.1.2)

    @ 目录 1.MVT 2.模型 3.视图 4.模板 5.常用的命令 6.pycharm创建django工程 关于作者 1.MVT 项目结构如下,其中项目同名文件夹为配置文件 每一个项目有多个应用(未考 ...