Submission #388021

#TimeUsernameProblemLanguageResultExecution timeMemory
388021b00n0rpBiochips (IZhO12_biochips)C++17
0 / 100
3 ms4940 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define REP(i,n) for (int i = 0; i < n; i++) #define FOR(i,a,b) for (int i = a; i < b; i++) typedef vector<int> vi; const int INF=1e9; const int MAXN = 200005; int n,m,root; vi adj[MAXN]; int par[MAXN],a[MAXN],st[MAXN],fin[MAXN]; int tim = 0; int dp[MAXN][505]; void dfs(int u){ st[u] = tim; for(auto v:adj[u]) dfs(v); FOR(j,1,m+1){ dp[tim+1][j] = max(dp[tim][j],dp[st[u]][j-1]+a[u]); } tim++; } signed main(){ cin >> n >> m; FOR(i,1,n+1){ cin >> par[i] >> a[i]; if(!par[i]) root = i; else adj[par[i]].pb(i); } FOR(i,1,m+1) dp[0][i] = -INF; dfs(root); cout << dp[n][m] << "\n"; } /* int val[200001], m, t; vector<int> g[200001]; int dp[200001][501], par[200001]; void dfs(int c) { par[c] = t; for(int e : g[c]) dfs(e); for(int i=1;i<=m;i++) dp[t+1][i] = max(dp[t][i],dp[par[c]][i-1]+val[c]); t++; } int main() { int n, r; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { int p; scanf("%d%d",&p,val+i); if(!p) r = i; else g[p].push_back(i); } for(int i=1;i<=m;i++) dp[0][i] = -1e9; dfs(r); printf("%d\n",dp[n][m]); } */
#Verdict Execution timeMemoryGrader output
Fetching results...