#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,res=0,l[100005],parent[100005], passed[100005];
int sparse_table[100005][25];
vector<pair<int,int>> gr[100005];
pair<int,int> a;
void dfs(int u){
for (auto [v,w] : gr[u]){
if(parent[v] == 0){
parent[v] = u;
l[v] = l[u] + w;
dfs(v);
}
}
}
void dfs_1(int u,int d){
a = max(a, make_pair(d,u));
for(auto [v,w] : gr[u]){
if (!passed[v]){
passed[v] = 1;
dfs_1(v, w+d);
}
}
}
void preprocess_lca() {
for (int i = 1; i <= n; i++){
sparse_table[i][0] = parent[i];
}
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 parent[p];
}
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});
}
memset(passed,0,sizeof(passed));
memset(parent,0,sizeof(parent));
a = {-100,-100};
dfs_1(1,0);
int pa = a.second;
memset(passed,0,sizeof(passed));
a = {-100,-100};
dfs_1(pa,0);
int pb = a.second;
dfs(1);
preprocess_lca();
for(int i = 1;i <= n; i++){
cout<<max(l[i]+l[pa]-l[lca(i,pa)]*2, l[i]+l[pb]-l[lca(i,pb)]*2)<<endl;
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
2 ms |
4180 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
2 ms |
4180 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
2 ms |
4180 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
2 ms |
4180 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
353 ms |
30840 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
2 ms |
4180 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |