zoukankan      html  css  js  c++  java
  • E. Tree Queries 题解(思维+dfs序)

    题目链接

    题目思路

    这个题意显然不当人,要转换下题意就能变的简单

    即所有节点的父亲节点是否再同一条链上,有很多种写法,

    最简便的就是利用dfs序判断即可

    代码

    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define debug cout<<"I AM HERE"<<endl;
    using namespace std;
    typedef long long ll;
    const int maxn=2e5+5,inf=0x3f3f3f3f,mod=1e9+7;
    const double eps=1e-6;
    int n,m,cnt;
    int a[maxn];
    vector<int> g[maxn];
    int in[maxn],out[maxn];
    int dad[maxn];
    void dfs(int u,int fa){
        dad[u]=fa;
        in[u]=++cnt;
        for(auto x:g[u]){
            if(x==fa) continue;
            dfs(x,u);
        }
        out[u]=cnt;
    }
    bool cmp(int x,int y){
        return in[x]<in[y];
    }
    signed main(){
        scanf("%d%d",&n,&m);
        for(int i=1,u,v;i<=n-1;i++){
            scanf("%d%d",&u,&v);
            g[u].push_back(v);
            g[v].push_back(u);
        }
        dfs(1,1);
        for(int i=1,k;i<=m;i++){
            scanf("%d",&k);
            for(int j=1;j<=k;j++){
                scanf("%d",&a[j]);
                a[j]=dad[a[j]];
            }
            sort(a+1,a+1+k,cmp);
            bool flag=1;
            for(int j=2;j<=k;j++){
                if(in[a[j]]>out[a[j-1]]||in[a[j]]<in[a[j-1]]){
                    flag=0;
                    break;
                }
            }
            printf(flag?"YES
    ":"NO
    ");
        }
        return 0;
    
    }
    
    
    
    不摆烂了,写题
  • 相关阅读:
    46 Simple Python Exercises-Higher order functions and list comprehensions
    IDEA一些设置
    DDD建模案例----“视频课程”场景
    LA 4727
    uva 1377
    uva 1421
    UVA
    LA 4731
    uva 11404
    uva 11143
  • 原文地址:https://www.cnblogs.com/hunxuewangzi/p/15407429.html
Copyright © 2011-2022 走看看