2 solutions

  • 0
    @ 2026-1-4 8:51:35

    40pts

    #include<bits/stdc++.h>
    using namespace std;
    const int N=20;
    vector<int> g[N];
    int w[N],color[N];
    int st;
    void dfs(int u,int flag)
    {
    	if(color[u]==1) flag=1;
    	if(g[u].size()==0&&flag==0) st=0;
    	for(auto j:g[u])
    	{
    		dfs(j,flag);
    	}
    }
    int main()
    {
    	int n;
    	cin>>n;
    	for(int i=1;i<n;i++)
    	{
    		int fi;
    		cin>>fi;
    		fi--;
    		g[fi].push_back(i);
    	}
    	for(int i=0;i<n;i++)
    	{
    		cin>>w[i];
    	}
    	long long res=1000000000;
    	for(int i=1;i<1<<n;i++)
    	{
    		memset(color,0,sizeof color);
    		long long now=0;
    		for(int j=0;j<n;j++)
    		{
    			if(i>>j&1)
    			{
    				now+=w[j];
    				color[j]=1;
    			}
    		}
    		st=1;
    		dfs(0,0);
    		//cout<<i<<" "<<st<<endl;
    		if(st) res=min(res,now); 
    	}
    	cout<<res;
    	return 0;
    }
    
    

    Information

    ID
    3025
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    10
    Tags
    # Submissions
    9
    Accepted
    1
    Uploaded By