#include <bits/stdc++.h>
using namespace std;
#define int long long
#define all(v) v.begin(), v.end()
const int inf = 1e18, M = 2e5 + 1;
map<int,int> dis[M];
vector<pair<int,int>> nei[M];
int r, par[M], dep[M];
void dfs(int u)
{
for (auto [i,w]:nei[u])
if (i!=par[u])
par[i]=u, dep[i]=dep[u]+1, dis[r][i]=dis[r][u]+w, dfs(i);
}
void f(int u)
{
r=u, dis[u][u]=par[u]=dep[u]=0, dfs(u);
}
signed main()
{
int n,k;
cin>>n>>k;
for (int i=1;i<n;i++)
{
int u,v,w;
cin>>u>>v>>w;
nei[u].push_back({v,w});
nei[v].push_back({u,w});
}
f(1);
int u=1;
for (int i=1;i<=n;i++)
if (dis[1][i]>dis[1][u]) u=i;
f(u);
int x=u;
for (int i=1;i<=n;i++)
if (dis[u][i]>dis[u][x]) x=i;
int o=x;
f(x);
x=u;
vector<int> v;
while (x)
v.push_back(x), x=par[x];
int m=v.size();
vector<int> can;
if (m%2) can={v[m/2]};
else can={v[m/2-1],v[m/2]};
int ans=1, mn=inf;
for (int i:can)
if (mn>max(dis[u][i],dis[o][i]))
ans=i,mn=max(dis[u][i],dis[o][i]);
cout<<mn<<endl;
cout<<ans<<endl;
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |