1 solutions
-
0
C++ :
#include<bits/stdc++.h> using namespace std; int n,m,q,f[302],a[302]; bool find(int x,int y){ //找x,当前为y if(!y&&x) return 0; if(f[y]==x) return 1; return find(x,f[y]); } bool chk(int x){ //判断如果以x为管理员满不满足要求 for(int i=1;i<=m;i++){ if(!find(x,a[i])&&a[i]!=x) return 0; } return 1; } int main(){ scanf("%d",&n); for(int i=1;i<n;i++) scanf("%d",&f[i]); scanf("%d",&q); while(q--){ scanf("%d",&m); for(int i=1;i<=m;i++) scanf("%d",&a[i]); for(int i=n-1;i>=0;i--){ //从后往前遍历 if(!i) puts("0"); //只能是老板了,特判一下会更快 else if(chk(i)){ printf("%d\n",i); break; } } } return 0; }
- 1
Information
- ID
- 9173
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By