Submission #1265835

#TimeUsernameProblemLanguageResultExecution timeMemory
1265835nanaseyuzukiHarbingers (CEOI09_harbingers)C++20
100 / 100
65 ms19880 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define faster ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define fi first #define se second #define pb push_back typedef pair<int , int> pii; const int inf = 1e18; const int mod = 1e9 + 7; const int maxn = 1e5 + 5; int n , V[maxn] , S[maxn] , dp[maxn] , d[maxn] , len = 0; pii cvh[maxn]; vector<pii> adj[maxn]; struct line { pii last_line; int pos , last_len; }; vector<line> cur; int cal(int m , int x , int b) { return m * x + b; } int get(int x) { int l = 0 , r = len - 1; int minn = cal(cvh[0].fi , x , cvh[0].se); while(l < r) { int mid = (l + r) >> 1; if(cal(cvh[mid].fi , x , cvh[mid].se) < cal(cvh[mid + 1].fi , x , cvh[mid + 1].se)) { r = mid; minn = min(minn , cal(cvh[mid].fi , x , cvh[mid].se)); } else { l = mid + 1; minn = min(minn , cal(cvh[mid + 1].fi , x , cvh[mid + 1].se)); } } return minn; } bool check(pii l1 , pii l2 , pii l3) { return (double)(l3.se - l1.se) / (double)(l1.fi - l3.fi) <= (double)(l2.se - l1.se) / (double)(l1.fi - l2.fi); } void add(int m , int b) { int l = 1 , r = len - 1 , p = len; while(l <= r) { int mid = (l + r) >> 1; if(check(cvh[mid - 1] , cvh[mid] , {m , b})) { p = mid; r = mid - 1; } else l = mid + 1; } cur.pb({cvh[p] , p , len}); len = p + 1; cvh[p] = {m , b}; } void remove() { line gan = cur.back(); cur.pop_back(); cvh[gan.pos] = gan.last_line; len = gan.last_len; } void dfs(int u , int par) { if(u != 1) dp[u] = get(V[u]) + d[u] * V[u] + S[u]; add(-d[u] , dp[u]); for(auto v : adj[u]) { if(v.fi != par) { d[v.fi] = d[u] + v.se; dfs(v.fi , u); } } remove(); } main() { faster cin >> n; for(int i = 1 ; i <= n - 1 ; ++i) { int u , v , d; cin >> u >> v >> d; adj[u].pb({v , d}); adj[v].pb({u , d}); } for(int i = 2 ; i <= n ; ++i) cin >> S[i] >> V[i]; dfs(1 , -1); for(int i = 2 ; i <= n ; ++i) cout << dp[i] << " "; }

Compilation message (stderr)

harbingers.cpp:87:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   87 | main()
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...