제출 #1159733

#제출 시각아이디문제언어결과실행 시간메모리
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...