제출 #388022

#제출 시각아이디문제언어결과실행 시간메모리
388022b00n0rp바이오칩 (IZhO12_biochips)C++17
100 / 100
344 ms400964 KiB
#include <bits/stdc++.h> using namespace std; #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 g[MAXN]; int val[MAXN],par[MAXN]; int t = 0; int dp[MAXN][505]; void dfs(int u){ par[u] = t; for(auto v:g[u]) dfs(v); for(int i=1;i<=m;i++){ dp[t+1][i] = max(dp[t][i],dp[par[u]][i-1]+val[u]); } t++; } signed main(){ cin >> n >> m; for(int i=1;i<=n;i++){ int p; cin >> p >> val[i]; if(!p) root = i; else g[p].push_back(i); } for(int i=1;i<=m;i++) 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...