Submission #1294063

#TimeUsernameProblemLanguageResultExecution timeMemory
1294063moha1111Biochips (IZhO12_biochips)C++20
100 / 100
286 ms18996 KiB
#include <bits/stdc++.h> #define all(a) a.begin() , a.end() using namespace std; #define int long long vector<int> graph[200005] , v(200005); int n , m; vector<int> dfs(int node , int par) { vector<int> dp = {0 , 0} , nedp(m + 5, 0); for(auto i : graph[node]) { if(i != par) { vector<int> curdp = dfs(i , node); for(int i = 0 ; i < min((int)dp.size() , m + 1) ; i++) { for(int j = 0 ; j < min((int)curdp.size() , m + 1) ; j++) { if(i + j > m) break; nedp[i + j] = max(dp[i] + curdp[j] , nedp[i + j]); } } dp = nedp; for(int i = 0 ; i <= 1 + m ; i++) nedp[i] = 0; } } dp[1] = max(v[node] , dp[1]); return dp; } void solve() { cin >> n >> m; int ro = -1; for(int i = 1 ; i <= n ; i++) { int a; cin >> a >> v[i]; if(a == 0) ro = i; else { graph[a].push_back(i); graph[i].push_back(a); } } vector<int> f = dfs(ro , -1); cout << f[m]; } signed main() { // usaco("triangles"); int t = 1; //cin >> t; while(t--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...