Submission #1266326

#TimeUsernameProblemLanguageResultExecution timeMemory
1266326PlayVoltzBiochips (IZhO12_biochips)C++20
20 / 100
568 ms589824 KiB
#include <cstdio> #include <stdio.h> #include <stdbool.h> #include <iostream> #include <map> #include <vector> #include <climits> #include <stack> #include <string> #include <queue> #include <algorithm> #include <set> #include <unordered_set> #include <unordered_map> #include <cmath> #include <cctype> #include <bitset> #include <iomanip> #include <cstring> #include <numeric> #include <cassert> using namespace std; #define int long long #define pii pair<int, int> #define mp make_pair #define pb push_back #define fi first #define se second int n, k; vector<int> vect, sz; vector<vector<int> > graph, dp; void dfs(int node){ sz[node]=1; for (auto num:graph[node]){ dfs(num); for (int i=k; i>=0; --i)for (int j=min(i, sz[num]); j>=0; --j)dp[node][i]=max(dp[node][i], dp[num][i-j]+dp[node][j]); sz[node]+=sz[num]; } dp[node][1]=max(dp[node][1], vect[node]); } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int root, a; cin>>n>>k; sz.resize(n+1); dp.resize(n+1, vector<int>(k+1, 0)); graph.resize(n+1); vect.resize(n+1); for (int i=1; i<=n; ++i){ cin>>a>>vect[i]; if (!a)root=i; else graph[a].pb(i); } dfs(root); cout<<dp[root][k]; }
#Verdict Execution timeMemoryGrader output
Fetching results...