Submission #1159733

#TimeUsernameProblemLanguageResultExecution timeMemory
1159733dzuizzJanjetina (COCI21_janjetina)C++20
0 / 110
1595 ms2888 KiB
#include<bits/stdc++.h>
using namespace std;
//#define DEBUG
#define int long long
constexpr int maxn=100005;
constexpr int inf=3e18;
int pa[maxn][18],lvl[maxn],pre[maxn],pos[maxn],_ptr=1;
vector<pair<int,int>> adj[maxn];
void dfs(int i,int p){
	pre[i]=_ptr;
	for(auto&[w,x]:adj[i]){
		if(x==p) continue;
		lvl[x]=lvl[i]+1;
		pa[x][0]=i;
		dfs(x,i);
	}
	pos[i]=_ptr++;
}
int lca(int a,int b){
	if(lvl[a]>lvl[b]) swap(a,b);
	for(int j=17;j>=0;--j) if(lvl[pa[b][j]]>=lvl[a])
		b=pa[b][j];
	if(a==b) return a;
	for(int j=17;j>=0;--j) if(pa[a][j]!=pa[b][j])
		a=pa[a][j],b=pa[b][j];
	return pa[a][0];
}
int f(int i,int k){
	for(auto&[w,x]:adj[i]){
		if(x==pa[i][0]) continue;
		if(pre[x]<=pos[k]&&pos[k]<=pos[x])
			return max(w,f(x,k));
	}
	return 0;
}
signed main(){
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	int n,k; cin>>n>>k;
	for(int i=1;i<n;++i){
		int x,y,w; cin>>x>>y>>w;
		adj[x].emplace_back(w,y);
		adj[y].emplace_back(w,x);
	}
	pa[1][0]=1;
	dfs(1,0);
	for(int j=0;j<17;++j) for(int i=1;i<=n;++i){
		pa[i][j+1]=pa[pa[i][j]][j];
	}
	int ans=0;
	for(int x=1;x<=n;++x) for(int y=x+1;y<=n;++y){
		int z=lca(x,y),w=max(f(z,x),f(z,y)),l=lvl[x]+lvl[y]-2*lvl[z];
		#ifdef DEBUG
		cout<<x<<" "<<y<<" -> "<<z<<'\n';
		#endif
		ans+=(w-l>=k?2:0);
	}
	cout<<ans<<'\n';
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...