# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
302569 | 2020-09-18T19:28:57 Z | milisav | 바이오칩 (IZhO12_biochips) | C++14 | 3 ms | 4992 KB |
#include<bits/stdc++.h> #pragma GCC optimize("O3") #define maxn 200010 #define maxm 510 using namespace std; int n,m; int rt; int p[maxn]; int x[maxn]; vector<int> ch[maxn]; int a[maxn]; int s[maxn]; int dp[maxn][maxm]; int id=0; int tot=0; void dfs(int u) { int cid=id++; a[cid]=x[u]; tot++; for(auto v:ch[u]) dfs(v); s[cid]=id; } int main() { scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d %d",&p[i],&x[i]); if(p[i]==0) rt=i; else ch[p[i]].push_back(i); } dfs(rt); //assert(tot==n); for(int j=1;j<=m;j++) dp[0][j]=-1e9; for(int i=0;i<n;i++) { for(int j=0;j<=m;j++) dp[i+1][j]=max(dp[i+1][j],dp[i][j]); for(int j=0;j<=m-1;j++) dp[s[i]][j+1]=max(dp[s[i]][j+1],dp[i][j]+a[i]); } printf("%d",dp[n][m]); return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 4992 KB | Output is correct |
2 | Incorrect | 3 ms | 4992 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |