Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <set>
- #include <algorithm>
- #include <iostream>
- #pragma GCC optimize("Ofast")
- #pragma GCC optimize("unroll-loops")
- #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
- #define int long
- #define endl "\n"
- #define all(x) x.begin(),x.end()
- #define rr return 0
- #define xx first
- #define yy second
- #define pii pair<int,int>
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- int n, b, ans;
- vector<int> c;
- vector<int> l;
- vector<vector<int>> g;
- //vector<multiset<int>> kek;
- multiset<int> dfs(int v){
- multiset<int> s;
- s.insert(c[v]);
- for(auto i : g[v]){
- multiset<int> t = dfs(i);
- if(s.size() < t.size()){
- swap(s, t);
- }
- for(auto j : t){
- s.insert(j);
- }
- }
- int cs = 0;
- int p = 0;
- multiset<int> ret;
- for(auto i : s){
- cs += i;
- if(cs > b){
- break;
- }
- ret.insert(i);
- p++;
- }
- ans = max(ans, l[v] * p);
- return ret;
- }
- signed main(){
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- cin >> n >> b;
- g.resize(n + 1);
- //kek.resize(n + 1);
- c.resize(n + 1);
- l.resize(n + 1);
- for(int i = 1;i <= n;i++){
- int x;
- cin >> x >> c[i] >> l[i];
- if(x != 0){
- g[x].push_back(i);
- }
- }
- ans = 0;
- dfs(1);
- cout << ans;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement