社区讨论

野生symbolbee求助

P10113[GESP202312 八级] 大量的工作沟通参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhj3akyf
此快照首次捕获于
2025/11/03 20:01
4 个月前
此快照最后确认于
2025/11/03 20:01
4 个月前
查看原帖
C
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1;
struct edge{
	int edge,l,r;
}a[N];
int n,q,f[N],cnt;
vector<int>g[N];
void dfs(int step){
	a[step].edge=cnt;
	a[step].l=cnt;
	for(int i=0;i<g[step].size();++i){
		if(g[step][i]==f[step])continue;
		cnt++;
		dfs(g[step][i]);
	}
	a[step].r=cnt;
}
void query(int step,int l,int r){
	bool flag=true;
	for(int i=0;i<g[step].size();++i){
		if(g[step][i]==f[i])continue;
		if(a[g[step][i]].l<=l&&r<=a[g[step][i]].r){
			query(g[step][i],l,r);
			flag=false;
		}
	}
	if(flag){
		cout<<step<<endl;
		return;
	}
}
int main(){
	cin>>n;
	for(int i=1;i<n;++i){
		cin>>f[i];
		g[f[i]].push_back(i);
	}
	dfs(0);
//	for(int i=0;i<n;++i){
//		cout<<a[i].l<<" "<<a[i].r<<endl;
//	}
	cin>>q;
	while(q--){
		int m,l=n,r=0;
		cin>>m;
		for(int i=1;i<=m;++i){
			int u;cin>>u;
			l=min(l,a[u].edge);
			r=max(r,a[u].edge);
		}
		query(0,l,r);
	}
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...