# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
89827 | 2018-12-18T14:06:48 Z | Vardanyan | 바이오칩 (IZhO12_biochips) | C++14 | 2000 ms | 375008 KB |
#include<bits/stdc++.h> using namespace std; const int N = 200*1000+5; const int M = 505; int dp[N][M]; int tin[N]; int tout[N]; int a[N]; int d[N]; vector<int> g[N]; int timer = 0; void dfs(int v,int p = -1){ tin[v] = ++timer; d[timer] = a[v]; for(int i = 0;i<g[v].size();i++){ int to = g[v][i]; if(to == p) continue; dfs(to,v); } tout[tin[v]] = timer; } int main() { int n,m; scanf("%d%d",&n,&m); int root; for(int i = 1;i<=n;i++){ int x,y; scanf("%d%d",&x,&y); if(x == 0) root = i; if(x){ g[i].push_back(x); g[x].push_back(i); } a[i] = y; } dfs(root); int ans = 0; for(int j = 1;j<=m;j++){ for(int i = timer;i>=1;i--){ //cout<<d[i]<<endl; if(j == 1){ dp[i][j] = d[i]; dp[i][j] = max(dp[i][j],dp[i+1][j]); continue; } dp[i][j] = max(dp[i][j],dp[i+1][j]); if(tout[i]+1<=timer) dp[i][j] = max(dp[i][j],dp[tout[i]+1][j-1]+d[i]); if(j == m) ans = max(ans,dp[i][j]); } } cout<<ans<<endl; return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 5112 KB | Output is correct |
2 | Correct | 5 ms | 5116 KB | Output is correct |
3 | Correct | 6 ms | 5288 KB | Output is correct |
4 | Correct | 35 ms | 23224 KB | Output is correct |
5 | Correct | 38 ms | 25496 KB | Output is correct |
6 | Correct | 47 ms | 25712 KB | Output is correct |
7 | Correct | 1909 ms | 306372 KB | Output is correct |
8 | Correct | 1620 ms | 307844 KB | Output is correct |
9 | Execution timed out | 2073 ms | 375008 KB | Time limit exceeded |
10 | Halted | 0 ms | 0 KB | - |