全部评论 5

  • 这……

    4天前 来自 广东

    2
  • 一旦登录,就会怎么样啊

    4天前 来自 浙江

    1
  • 6

    4天前 来自 广东

    1
  • #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+10;
    int n,d;
    vector<int>s[N];
    int t[N],ans[N];//表示深度所在子树根节点
    void dfs(int a,int h){//节点为a,深度为h
        t[h]=a;
        if(h>d){//深度一定大于d
            ans[a]=t[h-d];
        }else{
            ans[a]=-1;//没有此数,-1作废
        }
        for(int j=0;j<s[a].size();j++){
            dfs(s[a][j],h+1);
        }
    }
    int main(){
        cin>>n>>d;
        for(int i=2;i<=n;i++){
            int x;
            cin>>x;
            s[x].push_back(i);//表示孩子节点存储法
        }
        dfs(1,1);//从Ⅰ节点开始,深度一开始为Ⅰ
        for(int i=1;i<=n;i++){
            cout<<ans[i]<<endl;
        }
    }
    

    5天前 来自 浙江

    1
  • #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+10;
    int n,d;
    vector<int>s[N];
    int t[N],ans[N];//表示深度所在子树根节点
    void dfs(int a,int h){//节点为a,深度为h
    t[h]=a;
    if(h>d){//深度一定大于d
    ans[a]=t[h-d];
    }else{
    ans[a]=-1;//没有此数,-1作废
    }
    for(int j=0;j<s[a].size();j++){
    dfs(s[a][j],h+1);
    }
    }
    int main(){
    cin>>n>>d;
    for(int i=2;i<=n;i++){
    int x;
    cin>>x;
    s[x].push_back(i);//表示孩子节点存储法
    }
    dfs(1,1);//从Ⅰ节点开始,深度一开始为Ⅰ
    for(int i=1;i<=n;i++){
    cout<<ans[i]<<endl;
    }
    }

    5天前 来自 浙江

    1

热门讨论