Submission #1304915

#TimeUsernameProblemLanguageResultExecution timeMemory
1304915vtnooDynamic Diameter (CEOI19_diameter)C++20
42 / 100
5093 ms20940 KiB
#include <bits/stdc++.h> using namespace std; const int N=100005; const long long INF=1e18; vector<pair<int,int>> g[N], adj[N], adj_r[N]; pair<int,int> con[N]; int n; long long dp[N], dp2[N], ed[N], deg[N]; void dfs(int u){ pair<long long,int> v1={0,0}, v2={0,0}; long long s=0; for(auto [v,i]:adj[u]){ dfs(v); v1=max(v1, {dp[v]+ed[i], v}); s=max(s, dp2[v]); } for(auto [v,i]:adj[u]){ if(v==v1.second)continue; v2=max(v2, {dp[v]+ed[i], v}); } dp[u]=v1.first; dp2[u]=max({dp[u], v1.first+v2.first, s}); return; } void dfs2(int u, int p){ for(auto [v,i]:g[u]){ if(v==p)continue; con[i]={u,v}; adj[u].push_back({v,i}); adj_r[v].push_back({u,i}); dfs2(v,u); } } void dfs3(int u){ pair<long long,int> v1={0,0}, v2={0,0}; long long s=0; for(auto [v,i]:adj[u]){ v1=max(v1, {dp[v]+ed[i], v}); s=max(s, dp2[v]); } for(auto [v,i]:adj[u]){ if(v==v1.second)continue; v2=max(v2, {dp[v]+ed[i], v}); } dp[u]=v1.first; dp2[u]=max({dp[u], v1.first+v2.first, s}); for(auto [v,i]:adj_r[u]){ dfs3(v); } } int main(){ int q; long long w; cin>>n>>q>>w; for(int i=0;i<n-1;i++){ int u,v; long long c; cin>>u>>v>>c; g[u].push_back({v,i}); g[v].push_back({u,i}); ed[i]=c; } dfs2(1,-1); dfs(1); long long last=0; while(q--){ long long d_, e_; cin>>d_>>e_; long long d=(d_+last)%(n-1); long long e=(e_+last)%w; ed[d]=e; dfs3(con[d].first); cout<<dp2[1]<<endl; last=dp2[1]; } }
#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...