2 solutions
-
1
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; }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; }100pts
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=1e5+10; LL w[N],d[N],ans[N]; vector<int> g[N]; LL dfs(int u) { if(g[u].size()==0) { ans[u]=w[u]; } else { LL now=0; for(auto j:g[u]) { now+=dfs(j); } ans[u]=min(w[u],now); } return ans[u]; } int main() { int n; cin>>n; for(int i=2;i<=n;i++) { int x; cin>>x; g[x].push_back(i); } for(int i=1;i<=n;i++) { cin>>w[i]; } cout<<dfs(1); return 0; } -
1
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
- 9
- Tags
- # Submissions
- 23
- Accepted
- 3
- Uploaded By