zoukankan      html  css  js  c++  java
  • cf1006 E. Military Problem

    像这种要求节点有序化,把邻接表的vector换成set就好啦。虽然这道题按照默认顺序造邻接表就可以有序了

    #include<bits/stdc++.h>
    using namespace std;
    int size[200010];
    int a[200010];
    int vis[200010];
    int tot;
    set<int> G[200010];
    void dfs(int node)
    {
        set<int>::iterator it;
        int cnt=1;
        for(it=G[node].begin();it!=G[node].end();it++)
        {
            int to=*it;
            //printf("%d ",to);
            a[++tot]=to;
            vis[to]=tot;
            dfs(to);
            cnt+=size[to];
        }
        size[node]=cnt;
    }
    int main()
    {
        int n,q;
        scanf("%d%d",&n,&q);
        for(int i=2;i<=n;i++)
        {
            int tmp;
            scanf("%d",&tmp);
            G[tmp].insert(i);
        }
        a[++tot]=1;
        vis[1]=tot;
        dfs(1);
        for(int i=1;i<=q;i++)
        {
            int u,k;
            scanf("%d%d",&u,&k);
            if(k>size[u])
              printf("-1
    ");
            else
              printf("%d
    ",a[vis[u]+k-1]);
        }
    }
  • 相关阅读:
    问题集
    第04次作业-树
    06-图
    05-查找
    04-树
    03-栈和队列
    02-线性表
    01-抽象数据类型
    C语言--总结报告
    C语言--函数嵌套
  • 原文地址:https://www.cnblogs.com/lishengkangshidatiancai/p/10310694.html
Copyright © 2011-2022 走看看