Submission #626944

#TimeUsernameProblemLanguageResultExecution timeMemory
626944GloryPaths (RMI21_paths)C++17
0 / 100
151 ms58368 KiB
#include<bits/stdc++.h> #define int long long using namespace std; int n,k,res=0,l[100005],d[100005]; int sparse_table[100005][25]; vector<pair<int,int>> gr[100005]; pair<int,int> a; void dfs(int u,int par,int dh,int lh) { sparse_table[u][0] = par; l[u] = lh; d[u] = dh; for (auto [v,w]: gr[u]){ if(v != par){ dfs(v,u,w+dh,lh+1); } } } void dfs_1(int u,int par,int dh) { a = max(a, {dh,u}); for(auto [v,w]: gr[u]){ if(v != par){ dfs_1(v, u, w+dh); } } } void preprocess_lca() { for (int k = 1; k <= 20; k++){ for (int i = 1; i <= n; i++){ sparse_table[i][k] = sparse_table[sparse_table[i][k - 1]][k - 1]; } } } int lca(int p, int q) { for (int i = 20; i >= 0; i--){ if (l[sparse_table[p][i]] >= l[q]){ p = sparse_table[p][i]; } } for (int i = 20; i >= 0; i--){ if (l[sparse_table[q][i]] >= l[p]){ q = sparse_table[q][i]; } } if (p == q){ return p; } for (int i = 20; i >= 0; i--){ if (sparse_table[p][i] != sparse_table[q][i]) { p = sparse_table[p][i]; q = sparse_table[q][i]; } } return sparse_table[p][0]; } int32_t main(){ cin>>n>>k; for(int i = 1;i < n; i++){ int u,v,w; cin>>u>>v>>w; gr[u].push_back({v,w}); gr[v].push_back({u,w}); } a = {-100,-100}; dfs_1(1,-1,0); int pa = a.second; a = {-100,-100}; dfs_1(pa,-1,0); int pb = a.second; dfs(1,-1,0,0); preprocess_lca(); for(int i = 1;i <= n; i++){ cout<<max(d[i]+d[pa]-d[lca(i,pa)]*2, d[i]+d[pb]-d[lca(i,pb)]*2)<<endl; } }
#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...