题解
2026-02-24 13:43:11
发布于:广东
16阅读
0回复
0点赞
通过“每人有且仅有一个直接领导”可以得出该公司的结构类似树,题目中要求找一个可以管理全部参会者的要求就是找所有参会者的共同祖先。
那么输入数据后预处理一下,is_[i][j]代表j员工是否为i员工的直接或简介领导。最后判断时从大到小循环,当找到了满足要求的就可以直接输出并退出循环。
#include<bits/stdc++.h>
using namespace std;
const int N=3e2+5;
int n,a[N],parant[N],q;
bool is_[N][N];
int main(){
cin>>n;
for(int i=1;i<n;i++) cin>>parant[i];
cin>>q;
for(int i=0;i<n;i++){
int cnt=i;
while(1){
is_[i][cnt]=1;
if(cnt==0) break;
cnt=parant[cnt];
}
}
while(q--){
int m1;
vector<int> m;
cin>>m1;
for(int i=0;i<m1;i++){
int x;
cin>>x;
m.push_back(x);
}
for(int i=n-1;i>=0;i--){
bool flag=1;
for(auto j:m){
if(!is_[j][i]) flag=0;
}
if(flag){
cout<<i<<'\n';
break;
}
}
}
return 0;
}
这里空空如也




有帮助,赞一个