子树的重心

描述

输入一棵树,判断每一棵子树的重心是哪一个节点。

输入描述

第一行输入n,q。n表示树的节点个数,q表示询问次数
第二行n-1个数,分别表示从节点2开始,各节点的父亲节点。
后面q行,每行一个数x,表示询问当前以x为根的子树中,树的重心位置。

输出描述

q行,每行表示一个答案

用例输入 1 

7 4
1 1 3 3 5 3
1
2
3
5

用例输出 1 

3
2
3
6
#include<bits/stdc++.h>
using namespace std;
int n;const int N=3e5+5;
vector<int>v[N];

int fa[N],J[N],tp[N],sz[N];
void dfs(int x){
	sz[x]=1;
	int res=0;
	for(int i=0;i<v[x].size();i++){
		int y=v[x][i];
		dfs(y);
		sz[x]+=sz[y];
		if(sz[y]>sz[J[x]]) J[x]=y;
	}
	if(J[x]==0){
		tp[x]=x;
		return;
	}tp[x]=tp[J[x]];
	while(sz[tp[x]]*2<sz[x]) tp[x]=fa[tp[x]];
}
int main(){
	cin>>n;int m;
	cin>>m;
	for(int i=2;i<=n;i++){
		int x;
		cin>>x;
		fa[i]=x;
		v[x].push_back(i);
	}
	dfs(1);
	
	for(int i=1;i<=m;i++){
		int k;cin>>k;
		cout<<tp[k]<<endl;
	}
	
}

相关推荐

  1. 重心

    2024-07-18 20:58:03       23 阅读
  2. 【图论】重心

    2024-07-18 20:58:03       25 阅读
  3. AcWing 846. 重心(dfs)

    2024-07-18 20:58:03       54 阅读
  4. 力扣 572. 另一棵

    2024-07-18 20:58:03       55 阅读
  5. leetcode 572. 另一颗

    2024-07-18 20:58:03       68 阅读
  6. Leetcode 572 另一棵

    2024-07-18 20:58:03       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 20:58:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 20:58:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 20:58:03       58 阅读
  4. Python语言-面向对象

    2024-07-18 20:58:03       69 阅读

热门阅读

  1. 网站流量统计分析工具之plausible.io

    2024-07-18 20:58:03       22 阅读
  2. 设计模式--享元模式

    2024-07-18 20:58:03       22 阅读
  3. ReferenceEquals

    2024-07-18 20:58:03       24 阅读
  4. 2024国家护网面试小结

    2024-07-18 20:58:03       21 阅读
  5. 数据结构第28节 字典树

    2024-07-18 20:58:03       20 阅读
  6. 详解深度学习中的epochs

    2024-07-18 20:58:03       23 阅读
  7. 梧桐数据库: 数据库技术中的重写子查询技术

    2024-07-18 20:58:03       23 阅读
  8. ubuntu 可以直接在图像界面打开命令行吗

    2024-07-18 20:58:03       18 阅读