2 solutions
-
0
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