# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
488451 | 2021-11-19T01:43:04 Z | denniskim | 바이오칩 (IZhO12_biochips) | C++14 | 258 ms | 524292 KB |
#include <bits/stdc++.h> using namespace std; typedef int ll; typedef long double ld; #define MAX 9223372036854775807LL #define MIN -9223372036854775807LL #define INF 0x3f3f3f3f3f3f3f3f #define fi first #define se second ll n, m; ll a[200010]; ll all; vector<ll> vec[200010]; ll dp[200010][501]; ll rt; ll q[200010][503]; priority_queue< pair<ll, ll> > pq; void dfs(ll here, ll pa) { for(ll i : vec[here]) { if(i == pa) continue; dfs(i, here); } ll cc = 0; for(ll nx : vec[here]) { if(nx == pa) continue; for(ll j = 1 ; j <= m ; j++) { if(dp[nx][j] == -1) break; q[nx][q[nx][502]++] = dp[nx][j] - dp[nx][j - 1]; } } while(!pq.empty()) pq.pop(); for(ll i : vec[here]) { if(q[i][502]) pq.push(make_pair(q[i][0], i)); } for(ll i = 1 ; i <= m ; i++) { if(pq.empty()) break; pair<ll, ll> qq = pq.top(); pq.pop(); dp[here][i] = dp[here][i - 1] + qq.first; q[qq.second][501]++; if(q[qq.second][501] <= q[qq.second][502]) pq.push(make_pair(q[qq.second][q[qq.second][501]], qq.second)); } dp[here][1] = max(dp[here][1], a[here]); } int main(void) { scanf("%d %d", &n, &m); for(ll i = 1 ; i <= n ; i++) { scanf("%d %d", &all, &a[i]); if(!all) rt = i; else { vec[i].push_back(all); vec[all].push_back(i); } } for(ll i = 1 ; i <= n ; i++) { for(ll j = 1 ; j <= m ; j++) dp[i][j] = q[i][j] = -1; } dfs(rt, 0); dp[rt][1] = max(dp[rt][1], a[rt]); printf("%d", dp[rt][m]); return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 4944 KB | Output is correct |
2 | Correct | 3 ms | 5008 KB | Output is correct |
3 | Correct | 3 ms | 5388 KB | Output is correct |
4 | Correct | 22 ms | 40208 KB | Output is correct |
5 | Correct | 25 ms | 44644 KB | Output is correct |
6 | Correct | 23 ms | 44680 KB | Output is correct |
7 | Runtime error | 258 ms | 524292 KB | Execution killed with signal 9 |
8 | Halted | 0 ms | 0 KB | - |