Submission #1300953

#TimeUsernameProblemLanguageResultExecution timeMemory
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...