| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1294928 | maithedung | Race (IOI11_race) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define fast ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define exit return 0
#define cap pair<int,int>
#define fi first
#define se second
#define pb push_back
#define FOR(i,l,r) for(int i=l;i<=r;i++)
#define FOD(i,r,l) for(int i=r;i>=l;i--)
#define fill(f,x) memset(f,x,sizeof(f))
#define lcm(a,b) (a/__gcd(a,b)*b)
#define TIME 1.0 * clock() / CLOCKS_PER_SEC
int visited[1000005];
map<int,int> cnt;
int nut[1000005];
int dem=0;
int k;
vector<cap> ke[1000005];
int dp[1000005];
int heavy[1000005];
int in[1000005];
int out[1000005];
int kq=1e18;
int n;
int h[1000005];
map<int,int> flag;
void xuli(int u, int lca)
{
if(flag[k-visited[u]+2*visited[lca]])kq=min(kq,h[u]+cnt[k-visited[u]+2*visited[lca]]-2*h[lca]);
}
void add(int u)
{
if(!flag[visited[u]])
{
cnt[visited[u]]=h[u];
}
cnt[visited[u]]=min(cnt[visited[u]],h[u]);
flag[visited[u]]=1;
}
void dfs(int u, int cha)
{
int maxx=0;
dp[u]=1;
in[u]=(++dem);
nut[dem]=u;
if(u==1) h[u]=1;
for(auto it: ke[u])
{
int cost=it.second;
int v=it.first;
if(v!=cha)
{
h[v]=h[u]+1;
visited[v]=visited[u]+cost;
dfs(v,u);
dp[u]+=dp[v];
if(maxx<dp[v])
{
maxx=dp[v];
heavy[u]=v;
}
}
}
out[u]=dem;
}
void dfs2(int u, int cha, int keep)
{
for(auto it: ke[u])
{
int v=it.first;
if(v!=cha && v!=heavy[u])
{
dfs2(v,u,0);
}
}
if(heavy[u]!=0) dfs2(heavy[u],u,1);
xuli(u,u);
add(u);
for(auto it: ke[u])
{
int v=it.first;
if(v!=cha && v!=heavy[u])
{
FOR(i,in[v],out[v])
{
xuli(nut[i],u);
}
FOR(i,in[v],out[v]) add(nut[i]);
}
}
if(keep==0)
{
// kq=1e18;
// FOR(i,in[u],out[u]) del(nut[i]);
flag.clear();
cnt.clear();
}
}
signed main()
{
fast;
cin>>n>>k;
FOR(i,1,n-1)
{
int x,y,w;
cin>>x>>y>>w;
ke[x+1].push_back({y+1,w});
ke[y+1].push_back({x+1,w});
}
FOR(i,1,n) cnt[visited[i]]=1e18;
dfs(1,-1);
dfs2(1,-1,0);
if(kq==1e18) cout<<-1;
else cout<<kq;
exit;
}
/*
░▒▓███████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░ ░▒▓██████▓▒░
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒▒▓███▓▒░
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░
░▒▓███████▓▒░ ░▒▓██████▓▒░░▒▓█▓▒░░▒▓█▓▒░░▒▓██████▓▒░
*/
