#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
#define fi first
#define se second
#define mp make_pair
typedef pair<int, pii> pip;
#define pb push_back
#define eb emplace_back
const int MAXN = 100005;
int d[MAXN], m[MAXN], p[MAXN], n, k;
vector<pii> al[MAXN];
pip e[MAXN];
int main(){
cin.tie(0); ios_base::sync_with_stdio(0);
cin >> n >> k;
for(int i=0; i<n-1; i++){
cin >> e[i].se.fi >> e[i].se.se >> e[i].fi;
if(e[i].se.fi > e[i].se.se) swap(e[i].se.fi, e[i].se.se);
al[e[i].se.fi].eb(e[i].se.se, e[i].fi);
al[e[i].se.se].eb(e[i].se.fi, e[i].fi);
}
sort(e, e+n-1);
long long ans = 0;
if(false){
for(int i=1; i<=n; i++){
queue<int> q;
memset(d, 0, (n+1)*sizeof(int));
memset(m, 0, (n+1)*sizeof(int));
memset(p, 0, (n+1)*sizeof(int));
q.push(i);
while(q.size()){
int cn = q.front();
q.pop();
if(m[cn] - d[cn] >= k){
// cerr << i << ' ' << cn << '\n';
ans++;
}
for(auto j: al[cn]){
auto [nn, w] = j;
if(nn == p[cn]) continue;
d[nn] = d[cn] + 1;
m[nn] = max(m[cn], w);
p[nn] = cn;
q.push(nn);
}
}
}
}
else{
for(int i=1; i<n; i++){
m[i] = m[i-1] + i;
}
for(int i=1; i<=n; i++){
// p diddy
p[i] = i;
d[i] = i;
}
for(auto i: e){
auto [w, xy] = i;
auto [x, y] = xy;
int a = x - p[x] + 1;
int b = d[y] - y + 1;
int l = w-k;
d[p[x]] = d[y];
p[d[y]] = p[x];
if(l < 1) continue;
a = min(a, w);
b = min(b, w);
if(a > b) swap(a, b);
ans += a*(l-a);
ans += m[a] - m[l-b];
}
ans *= 2;
}
cout << ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |