
P3177 - GSEP 8级T2真题 [202312]大量的工作沟通 - CSPOJ

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,q;
vector<ll>d[(ll)1e5+15];
ll now=1,name[(ll)1e5+15],to[(ll)1e5+15];
void dfs(ll id){
if(d[id].size()==0)to[id]=id;
for(int i=0;i<d[id].size();i++) {
ll son=d[id][i];
name[son]=(++now);
dfs(son);
if(i+1==d[id].size())to[id]=to[son];
}
}
int main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<n;i++){
ll a;
cin>>a;
d[a].push_back(i);
}
cin>>q;
ll m;
name[0]=now;
dfs(0);
for(int i=1;i<=q;i++){
cin>>m;
ll a,l=INT_MAX,r=INT_MIN;
for(int j=1;j<=m;j++){
cin>>a;
l=min(l,name[a]);
r=max(r,name[a]);
}
for(int j=n-1;j>=0;j--)
if(l>=name[j] and name[to[j]]>=r){
cout<<j<<"\n";
break;
}
}
return 0;
}

1393

被折叠的 条评论
为什么被折叠?



