제출 #1265325

#제출 시각아이디문제언어결과실행 시간메모리
1265325phamtienhoangBiochips (IZhO12_biochips)C++20
100 / 100
635 ms404952 KiB
#include <iostream> #include <vector> #include <map> #include <string> #include <algorithm> #include <cassert> #include <cstring> #include <stack> #include <set> #include <cmath> #include <queue> #include <iomanip> using namespace std; const int N = 200002; int f[N][502]; int a[N]; int sz[N]; int n , m; vector<int> adj[N]; int root; void dfs(int u , int p){ sz[u] = 1; for(int i = 0 ; i < adj[u].size() ; i++){ int v = adj[u][i]; if(v == p) continue; dfs(v , u); for(int j = m ; j >= 0 ; j--){ for(int k = min(sz[v] , j); k >= 0. ;k--){ f[u][j] = max(f[u][j] , f[v][k] + f[u][j - k]); } } sz[u] += sz[v]; } f[u][1] = max(f[u][1] , a[u]); } int main(){ cin >> n >> m; for(int i = 1; i <= n ;i++){ int par; int val; cin >> par >> val; if(par == 0){ root = i; }else{ adj[i].push_back(par); adj[par].push_back(i); } a[i] = val; } dfs(root , -1); int ans = f[root][m]; cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...