Submission #1294090

#TimeUsernameProblemLanguageResultExecution timeMemory
1294090a__turkiBiochips (IZhO12_biochips)C++20
10 / 100
2119 ms589824 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define ll long long #define int long long #define mod 1000000007 #define ld long double #define all(x) (x).begin() , (x).end() #define pb push_back using namespace __gnu_pbds; using namespace std; template <typename T> using ordered_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>; const ll maxn=200005; ll n,m; vector<vector<ll>> v(maxn); vector<vector<ll>> dp(n+2,vector<ll>(m+2,LLONG_MIN)); vector<ll> val(maxn); vector<ll> combine(vector<ll>& a,vector<ll>& b){ vector<ll> r(min((ll)(a.size()+b.size()-1),m+1),LLONG_MIN); for(int i=0; i<a.size(); i++){ // if(a[i]<0) continue; for(int j=0; j<b.size(); j++){ // if(b[i]<0) continue; if(i+j<=m) r[i+j]=max(r[i+j],a[i]+b[j]); } } return r; } void dfs(ll st,ll p){ if(p==0) dp[st]={0}; for(ll i:v[st]){ if(i==p) continue; dfs(i,st); dp[st]=combine(dp[st],dp[i]); } dp[st][1]=max(dp[st][1],val[st]); } signed main(){ cin.tie(0)->sync_with_stdio(0); ll tt=1; // cin >> tt; while(tt--){ // ll n,m; ll root; cin >> n >> m; dp.assign(n+2,vector<ll>(m+2,LLONG_MIN)); for(int i=0; i<n; i++){ ll x,y; cin >> x >> y; if(x==0) root=i+1; v[x].pb(i+1),val[i+1]=y; } dfs(root,0); cout << dp[root][m]; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...