Advertisement
FHVirus

Untitled

Oct 20th, 2020
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #pragma Ofast
  2. #pragma loop-opt(on)
  3. #pragma GCC target("avx,avx2")
  4. #include<iostream>
  5. #include<algorithm>
  6. #include<vector>
  7. #include<queue>
  8. #include<functional>
  9. using namespace std;
  10.  
  11. #define ll long long
  12. #define mnpq priority_queue<int, vector<int>, greater<int>>
  13. const int N = 1e5 + 1;
  14. int n, m, b[N], c[N], l[N], sz[N];
  15. vector<int> adj[N];
  16.  
  17. ll ans = 0;
  18.  
  19. int getSize(int u, int p){
  20.     sz[u] = 1;
  21.     for(int v: adj[u])
  22.         if(v != p)
  23.             sz[u] += getSize(v, u);
  24.     return sz[u];
  25. }
  26.  
  27. void dfs(int u, int p, mnpq &pq){
  28.     int mxc = -1, mxcsz = 0;
  29.     for(int v: adj[u])
  30.         if(v != p and mxcsz < sz[v])
  31.             mxc = v, mxcsz = sz[v];
  32.  
  33.     if(mxc != -1) dfs(mxc, u, pq);
  34.  
  35. {
  36.     mnpq tmp;
  37.     for(int v: adj[u]){
  38.         if(v == mxc or v == p) continue;
  39.         dfs(v, u, tmp);
  40.         while(!tmp.empty())
  41.             pq.push(tmp.top()), tmp.pop();
  42.     }
  43. }
  44.  
  45.     pq.push(c[u]);
  46.     ll cursum = 0, cnt = 0;
  47.     vector<int> tmp;
  48.     while(!pq.empty() and cursum + pq.top() <= m){
  49.         tmp.push_back(pq.top());
  50.         cursum += pq.top();
  51.         pq.pop();
  52.         ++cnt;
  53.     }
  54.     ans = max(ans, (ll)l[u] * cnt);
  55.     for(int i: tmp)
  56.         pq.push(i);
  57. }
  58.  
  59. int main(){
  60.     ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  61.     cin >> n >> m;
  62.     for(int i = 1; i <= n; ++i){
  63.         cin >> b[i] >> c[i] >> l[i];
  64.         adj[i].push_back(b[i]);
  65.         adj[b[i]].push_back(i);
  66.     }
  67.     getSize(1, 0);
  68.  
  69.     mnpq jizz;
  70.     dfs(1, 0, jizz);
  71.     cout << ans;
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement