1 solutions

  • 1
    @ 2025-8-20 10:16:45
    #include<bits/stdc++.h>
    using namespace std;
    const int N=310;
    bool st[N];
    vector<int> g[N];
    void dfs(int u) //遍历以u为根的子树 
    {
    	st[u]=1;
    	for(auto x:g[u])
    	{
    		dfs(x);
    	}
    }
    int main()
    {
    	int n;
    	cin>>n;
    	for(int i=1;i<n;i++) //建立树结构 
    	{
    		int x;
    		cin>>x;
    		g[x].push_back(i);
    	}
    	int m;
    	cin>>m;
    	while(m--) //m次询问 
    	{
    		int x;
    		cin>>x;
    		vector<int> v;
    		for(int i=0;i<x;i++)
    		{
    			int t;
    			cin>>t;
    			v.push_back(t);
    		}
    		for(int i=n-1;i>=0;i--) //从大到小访问所有节点 
    		{
    			memset(st,0,sizeof st); //清空标记 
    			dfs(i);
    			int cnt=0; //不合法个数 
    			for(auto x:v)
    			{
    				if(!st[x])
    				{
    					cnt=1;
    				}
    			}
    			if(cnt==0) //没有不合法个数 
    			{
    				cout<<i<<endl;
    				break;
    			}
    		}
    	}
    	return 0;
    }
    
    • 1

    Information

    ID
    2541
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    5
    Tags
    (None)
    # Submissions
    4
    Accepted
    2
    Uploaded By