zoukankan      html  css  js  c++  java
  • jzoi#13t1

    dfs序真厉害(cena没有o2,vector会炸)

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include<cstring>
     6 #include<cstdlib>
     7 #include<ctime>
     8 #include<vector>
     9 #define intree(u,v) (id[u]<=R[v]&&id[u]>=L[v])
    10 #define Rep(i,k) for(int i=first[k];i;i=next[i])
    11 #define lowbit(a) ((a)&(-(a)))
    12 #define clr(a,x) memset(a,x,sizeof(a))
    13 #define rep(i,l,r) for(int i=l;i<(r);i++)
    14 typedef long long ll;
    15 using namespace std;
    16 int read()
    17 {
    18     char c=getchar();
    19     int ans=0,f=1;
    20     while(!isdigit(c)){
    21         if(c=='-') f=-1;
    22         c=getchar();
    23     }
    24     while(isdigit(c)){
    25         ans=ans*10+c-'0';
    26         c=getchar();
    27     }
    28     return ans*f;
    29 }
    30 struct edge{
    31     int u,v;
    32 };
    33 const int maxn=2000009;
    34 int n,m,dfstime=0,cnt=0,next[maxn],c[maxn],first[maxn],id[maxn],L[maxn],R[maxn],dep[maxn];
    35 edge E[maxn];
    36 int e[maxn<<1];
    37 void dfs(int k,int f){
    38     L[k]=id[k]=++dfstime;
    39     Rep(i,k){
    40         if(e[i]!=f){
    41             dep[e[i]]=dep[k]+1;
    42             dfs(e[i],k);
    43         }
    44     }
    45     R[k]=dfstime;
    46 }
    47 int main()
    48 {    
    49     freopen("tree.in","r",stdin);
    50     freopen("tree.out","w",stdout);
    51     n=read();
    52     rep(i,1,n){
    53         int from=read(),to=read();
    54         e[++cnt]=to;
    55         if(!first[from]) first[from]=cnt;
    56         next[c[from]]=cnt;
    57         c[from]=cnt;
    58         e[++cnt]=from;
    59         if(!first[to]) first[to]=cnt;
    60         next[c[to]]=cnt;
    61         c[to]=cnt;
    62         E[i].u=from;E[i].v=to;
    63     }
    64     dfs(1,0);
    65     m=read();
    66     while(m--){
    67         int from=read(),to=read(),t=read();
    68         int u=E[t].u,v=E[t].v;
    69         if(dep[u]>dep[v]) swap(u,v);
    70         if((intree(from,v)&&!intree(to,v))||(!intree(from,v)&&intree(to,v)))
    71         puts("NO");
    72         else puts("YES");
    73     }
    74     fclose(stdin);
    75     fclose(stdout);
    76     return 0;
    77 }
    View Code
  • 相关阅读:
    Tuesday / Wednesday = Increased Response
    脚本语言
    py2exe
    脚本语言
    访问者模式
    C调用lua脚本的效率测试
    Python编码规范
    py2exe
    Python编码规范
    访问者模式
  • 原文地址:https://www.cnblogs.com/chensiang/p/4741039.html
Copyright © 2011-2022 走看看