2 solutions

  • 0
    @ 2026-1-4 8:54:24

    20pts

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int a[N];
    int main()
    {
    	int n;
    	cin>>n;
    	for(int i=2;i<=n;i++)
    	{
    		int x;
    		cin>>x;
    	}
    	for(int i=1;i<=n;i++)
    	{
    		cin>>a[i];
    	}
    	sort(a+1,a+n+1);
    	cout<<a[1];
    	return 0;
    }
    
    
    • 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;
      }
      
      
      • 1

      Information

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