제출 #1019890

#제출 시각아이디문제언어결과실행 시간메모리
1019890NintsiChkhaidzePaths (RMI21_paths)C++17
0 / 100
259 ms22808 KiB
#include <bits/stdc++.h> #define pb push_back #define s second #define f first #define pb push_back #define pii pair <int,int> #define ll long long #define left h*2,l,(l + r)/2 #define right h*2+1,(l + r)/2 + 1,r #define int ll using namespace std; const int N = 2e5 + 5; vector <pii> v[N]; int I,D,timer,tin[N],tout[N],ans[N],dp[N]; pii t[4*N]; int lz[4*N],n; void predfs(int x,int par){ tin[x] = ++timer; for (auto [to,w]: v[x]){ if (to == par) continue; dp[to] = dp[x] + w; predfs(to,x); } tout[x] = timer; } void dfs(int x,int par,int d){ if (d > D) D = d,I = x; for (auto [to,w]: v[x]){ if (to == par) continue; dfs(to,x,d + w); } } void build(int h,int l,int r){ if (l == r){ t[h] = {dp[tin[l]],l}; return; } build(left); build(right); t[h] = max(t[h*2],t[h*2+1]); } void push(int h){ if (lz[h]==0) return; lz[h*2] += lz[h]; lz[h*2+1] += lz[h]; t[h*2].f += lz[h]; t[h*2 + 1].f += lz[h]; lz[h] = 0; } void upd(int h,int l,int r,int L,int R,int val){ if (r < L || R < l) return; if (L <= l && r <= R){ t[h].f += val; lz[h] += val; return; } push(h); upd(left,L,R,val); upd(right,L,R,val); t[h] = max(t[h*2],t[h*2+1]); } void calc(int x,int par,int k){ if (k == 1){ ans[x] = t[1].f; } for (auto [to,w]: v[x]){ if (to == par) continue; upd(1,1,n,tin[to],tout[to],-w); upd(1,1,n,1,tin[to] - 1,+w); upd(1,1,n,tout[to] + 1,n,+w); calc(to,x,k); upd(1,1,n,tin[to],tout[to],+w); upd(1,1,n,1,tin[to] - 1,-w); upd(1,1,n,tout[to] + 1,n,-w); } } signed main() { ios_base::sync_with_stdio(0),cin.tie(NULL),cout.tie(NULL); int k; cin>>n>>k; for (int i = 1; i < n; i++){ int a,b,c; cin>>a>>b>>c; v[a].pb({b,c}); v[b].pb({a,c}); } predfs(1,1); dfs(1,1,0); int d1 = I; I = D = 0; dfs(d1,d1,0); int d2 = I; if (k == 1){ build(1,1,n); calc(1,1,k); for (int i = 1; i <= n; i++){ cout<<ans[i]<<endl; } exit(0); } }

컴파일 시 표준 에러 (stderr) 메시지

Main.cpp: In function 'int main()':
Main.cpp:107:7: warning: unused variable 'd2' [-Wunused-variable]
  107 |   int d2 = I;
      |       ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...