# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
27196 | 2017-07-10T11:50:11 Z | TAMREF | 바이오칩 (IZhO12_biochips) | C++11 | 0 ms | 399676 KB |
#include <bits/stdc++.h> using namespace std; int dp[200001][501], par[200001], m[200001]; vector<int> C[200001]; int N,M,rt; void dfs(int x){ for(int u : C[x]) dfs(u); dp[x][1]=max(dp[x][1],m[x]); if(!par[x]) return; for(int f=M;f;f--){ dp[par[x]][f]=max(dp[par[x]][f],dp[x][f]); for(int j=f-1;j;j--) if(dp[par[x]][j] && dp[x][f-j]) dp[par[x]][f]=max(dp[par[x]][f],dp[par[x]][j]+dp[x][f-j]); } } int main(){ scanf("%d%d",&N,&M); for(int i=1;i<=N;i++){ scanf("%d%d",&par[i],&m[i]); if(!par[i]) rt=i; else C[par[i]].push_back(i); } dfs(rt); printf("%d\n",dp[rt][M]); }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 399676 KB | Output is correct |
2 | Incorrect | 0 ms | 399676 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |