Submission #953168

#TimeUsernameProblemLanguageResultExecution timeMemory
953168UnforgettableplFireworks (APIO16_fireworks)C++17
100 / 100
459 ms129816 KiB
#include <bits/stdc++.h> #include <utility> using namespace std; #define int long long struct line{ int m,n; multiset<int> points; line():n(0),m(0),points(){} line(int m,int n,multiset<int> points):m(m),n(n),points(points){} void operator+=(const line &other){ m+=other.m; n+=other.n; for(int i:other.points)points.insert(i); } }; int n,m; vector<pair<int,int>> adj[300001]; line functions[300001]; void dfs(int x,int p){ if(x>n) { functions[x] = {1, -adj[x][0].second, {adj[x][0].second, adj[x][0].second}}; return; } int len = 0; for(auto&i:adj[x]){ if(i.first!=p){ dfs(i.first,x); if(functions[i.first].points.size()>functions[x].points.size())swap(functions[x],functions[i.first]); functions[x]+=functions[i.first]; } else len = i.second; } int currsum = functions[x].n; int currslope = functions[x].m; for(auto i=--functions[x].points.end();i!=functions[x].points.begin();i--){ currslope--; if(currslope==-1)break; currsum+=*i; } while(functions[x].m>1){ functions[x].m--; functions[x].points.erase(--functions[x].points.end()); } int f = *--functions[x].points.end(); functions[x].points.erase(--functions[x].points.end()); int s = *--functions[x].points.end(); functions[x].points.erase(--functions[x].points.end()); functions[x].points.insert(s+len); functions[x].points.insert(f+len); functions[x].n = currsum-(f+len); functions[x] = functions[x]; } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; for(int i=2;i<=n+m;i++){ int p,c;cin>>p>>c; adj[i].emplace_back(p,c); adj[p].emplace_back(i,c); } dfs(1,0); line ans = functions[1]; int currsum = ans.n; int currslope = ans.m; for(auto i=--ans.points.end();i!=ans.points.begin();i--){ currslope--; if(currslope==-1)break; currsum+=*i; } cout << currsum << '\n'; }

Compilation message (stderr)

fireworks.cpp: In constructor 'line::line()':
fireworks.cpp:9:11: warning: 'line::n' will be initialized after [-Wreorder]
    9 |     int m,n;
      |           ^
fireworks.cpp:9:9: warning:   'long long int line::m' [-Wreorder]
    9 |     int m,n;
      |         ^
fireworks.cpp:11:5: warning:   when initialized here [-Wreorder]
   11 |     line():n(0),m(0),points(){}
      |     ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...