Military Problem(dfs序)

Military Problem

https://ac.nowcoder.com/acm/problem/112932

题目:

给你一棵有根树。个询问,输出从为根的子树往下得到的序列中第个数,超出则输出


做法:

求出树的序。每个询问输出结点中往后第个数。


代码:

#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false), cin.tie(0)
#define debug(a) cout << #a ": " << a << endl
using namespace std;
typedef long long ll;
const int N = 2e5 + 7;
vector<int> g[N];
int dfn[N], tag, in[N], out[N];
void dfs(int u){
    dfn[++tag] = u, in[u] = tag;
    for (auto &v : g[u]) dfs(v);
    out[u] = tag;
}
int main(void){
    IOS;
    int n, m; cin >> n >> m;
    for (int i = 2; i <= n; ++i){
        int x; cin >> x; 
        g[x].push_back(i);
    }
    dfs(1);
    while (m--){
        int u, k; cin >> u >> k;
        if (k > out[u]-in[u]+1){
            cout << -1 << endl;
        }else{
            cout << dfn[in[u]+k-1] << endl;
        }
    }
    return 0;
}
全部评论

相关推荐

像好涩一样好学:这公司我也拿过 基本明确周六加班 工资还凑活 另外下次镜头往上点儿
点赞 评论 收藏
分享
Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
昨天 00:11
已编辑
广东工业大学 算法工程师
避雷深圳&nbsp;&nbsp;yidao,试用期&nbsp;6&nbsp;个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务