제출 #1300953

#제출 시각아이디문제언어결과실행 시간메모리
1300953MuhammadSaramParkovi (COCI22_parkovi)C++20
0 / 110
425 ms81020 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...