// ~~ icebear ~~
#include <bits/stdc++.h>
using namespace std;
#define int ll
typedef long long ll;
typedef pair<int, int> ii;
typedef pair<int, ii> iii;
template<class T>
bool minimize(T &a, const T &b) {
if (a > b) return a = b, true;
return false;
}
template<class T>
bool maximize(T &a, const T &b) {
if (a < b) return a = b, true;
return false;
}
#define FOR(i,a,b) for(int i=(a); i<=(b); ++i)
#define FORR(i,a,b) for(int i=(a); i>=(b); --i)
#define REP(i, n) for(int i=0; i<(n); ++i)
#define RED(i, n) for(int i=(n)-1; i>=0; --i)
#define MASK(i) (1LL << (i))
#define BIT(S, i) (((S) >> (i)) & 1)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define task "xc"
const int MOD = 1e9 + 7;
const int inf = 1e9 + 27092008;
const ll INF = 1e18 + 27092008;
const int N = 2e5 + 5;
int n, k;
vector<ii> G[N];
int tour[N << 1], minHigh[N << 1][20], timer, tin[N];
ll high[N];
struct Edge {
int u, v, c;
} e[N];
void dfs(int u, int par) {
tin[u] = ++timer;
tour[timer] = u;
for(ii x : G[u]) {
int v, w; tie(v, w) = x;
if (v == par) continue;
high[v] = high[u] + w;
dfs(v, u);
tour[++timer] = u;
}
}
#define MIN_HIGH(x, y) (high[x] < high[y] ? x : y)
int LCA(int u, int v) {
int l = tin[u];
int r = tin[v];
if (l > r) swap(l, r);
int k = __lg(r - l + 1);
return MIN_HIGH(minHigh[l][k], minHigh[r - MASK(k) + 1][k]);
}
ll dist(int u, int v) {
int p = LCA(u, v);
return high[u] + high[v] - 2 * high[p];
}
struct DSU {
vector<int> lab, l_dia, r_dia;
vector<ll> diameter;
vector<array<int, 3>> history;
ll mx_dia;
DSU(int n = 0): lab(n + 5, -1), l_dia(n + 5, 0), r_dia(n + 5, 0), history(), diameter(n + 5, 0), mx_dia(0) {
FOR(i, 1, n) l_dia[i] = r_dia[i] = i;
}
int root(int v) {
return (lab[v] < 0 ? v : root(lab[v]));
}
bool unite(int u, int v) {
u = root(u);
v = root(v);
if (u == v) return false;
if (lab[u] > lab[v]) swap(u, v);
int l = l_dia[u], r = r_dia[u];
if (dist(l_dia[u], l_dia[v]) > dist(l, r)) l = l_dia[u], r = l_dia[v];
if (dist(l_dia[u], r_dia[v]) > dist(l, r)) l = l_dia[u], r = r_dia[v];
if (dist(r_dia[u], l_dia[v]) > dist(l, r)) l = r_dia[u], r = l_dia[v];
if (dist(r_dia[u], r_dia[v]) > dist(l, r)) l = r_dia[u], r = r_dia[v];
if (dist(l_dia[v], r_dia[v]) > dist(l, r)) l = l_dia[v], r = r_dia[v];
history.pb({0, u, lab[u]});
history.pb({0, v, lab[v]});
history.pb({1, u, l_dia[u]});
history.pb({2, u, r_dia[u]});
history.pb({3, u, diameter[u]});
history.pb({4, -1, mx_dia});
lab[u] += lab[v];
lab[v] = u;
if (maximize(diameter[u], dist(l, r))) l_dia[u] = l, r_dia[u] = r;
maximize(mx_dia, diameter[u]);
return true;
}
void snap_shot() {
history.pb({-1, -1, -1});
}
void roll_back() {
while(!history.empty()) {
auto T = history.back(); history.pop_back();
if (T[0] == -1) break;
if (T[0] == 0) lab[T[1]] = T[2];
if (T[0] == 1) l_dia[T[1]] = T[2];
if (T[0] == 2) r_dia[T[1]] = T[2];
if (T[0] == 3) diameter[T[1]] = T[2];
if (T[0] == 4) mx_dia = T[2];
}
}
} dsu;
int ans[N];
void DnC(int qryL, int qryR, int ansL, int ansR) {
if (qryL > qryR) return;
int qryM = (qryL + qryR) >> 1, ansM = max(ansL, qryM + 1);
dsu.snap_shot();
FOR(i, qryL, qryM) dsu.unite(e[i].u, e[i].v);
if (dsu.mx_dia > k) {
dsu.roll_back();
DnC(qryL, qryM - 1, ansL, ansR);
return;
}
FORR(i, ansR, max(ansL, qryM)) {
dsu.unite(e[i].u, e[i].v);
if (dsu.mx_dia > k) {
ansM = i + 1;
break;
}
}
ans[qryM] = ansM;
if (ansM == ansR + 1) {
dsu.roll_back();
DnC(qryL, qryM - 1, ansL, ansR);
dsu.snap_shot();
FOR(i, qryL, qryM) dsu.unite(e[i].u, e[i].v);
DnC(qryM + 1, qryR, ansL, ansR);
return;
}
dsu.roll_back();
dsu.snap_shot();
FOR(i, ansM + 1, ansR) dsu.unite(e[i].u, e[i].v);
DnC(qryL, qryM - 1, ansL, ansM);
dsu.roll_back();
dsu.snap_shot();
FOR(i, qryL, qryM) dsu.unite(e[i].u, e[i].v);
DnC(qryM + 1, qryR, ansM, ansR);
dsu.roll_back();
}
void init(void) {
cin >> n >> k;
FOR(i, 1, n - 1) {
int u, v, c;
cin >> u >> v >> c;
G[u].pb(mp(v, c));
G[v].pb(mp(u, c));
e[i] = {u, v, c};
}
}
void process(void) {
dfs(1, -1);
FOR(i, 1, timer) minHigh[i][0] = tour[i];
FOR(j, 1, 19) FOR(i, 1, timer - MASK(j) + 1) minHigh[i][j] = MIN_HIGH(minHigh[i][j - 1], minHigh[i + MASK(j - 1)][j - 1]);
int r = 0;
ll res = 0;
dsu = DSU(n);
FORR(i, n - 1, 1) {
dsu.unite(e[i].u, e[i].v);
if (dsu.mx_dia > k) {
r = i + 1;
break;
}
}
if (r == 0) {
cout << 1LL * n * (n - 1) / 2;
exit(0);
} else res += n + 1 - r;
dsu = DSU(n);
FOR(i, 1, n - 1) ans[i] = n + 1;
DnC(1, n - 1, 1, n - 1);
FOR(i, 1, n - 1) res += n + 1 - ans[i];
cout << res;
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int tc = 1;
// cin >> tc;
while(tc--) {
init();
process();
}
return 0;
}
Ly8gfn4gaWNlYmVhciB+fgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBpbnQgbGwKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gaWk7CnR5cGVkZWYgcGFpcjxpbnQsIGlpPiBpaWk7Cgp0ZW1wbGF0ZTxjbGFzcyBUPgogICAgYm9vbCBtaW5pbWl6ZShUICZhLCBjb25zdCBUICZiKSB7CiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gYSA9IGIsIHRydWU7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKdGVtcGxhdGU8Y2xhc3MgVD4KICAgIGJvb2wgbWF4aW1pemUoVCAmYSwgY29uc3QgVCAmYikgewogICAgICAgIGlmIChhIDwgYikgcmV0dXJuIGEgPSBiLCB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiNkZWZpbmUgRk9SKGksYSxiKSBmb3IoaW50IGk9KGEpOyBpPD0oYik7ICsraSkKI2RlZmluZSBGT1JSKGksYSxiKSBmb3IoaW50IGk9KGEpOyBpPj0oYik7IC0taSkKI2RlZmluZSBSRVAoaSwgbikgZm9yKGludCBpPTA7IGk8KG4pOyArK2kpCiNkZWZpbmUgUkVEKGksIG4pIGZvcihpbnQgaT0obiktMTsgaT49MDsgLS1pKQojZGVmaW5lIE1BU0soaSkgKDFMTCA8PCAoaSkpCiNkZWZpbmUgQklUKFMsIGkpICgoKFMpID4+IChpKSkgJiAxKQojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQojZGVmaW5lIHRhc2sgInhjIgoKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7CmNvbnN0IGludCBpbmYgPSAxZTkgKyAyNzA5MjAwODsKY29uc3QgbGwgSU5GID0gMWUxOCArIDI3MDkyMDA4Owpjb25zdCBpbnQgTiA9IDJlNSArIDU7CmludCBuLCBrOwp2ZWN0b3I8aWk+IEdbTl07CmludCB0b3VyW04gPDwgMV0sIG1pbkhpZ2hbTiA8PCAxXVsyMF0sIHRpbWVyLCB0aW5bTl07CmxsIGhpZ2hbTl07CgpzdHJ1Y3QgRWRnZSB7CiAgICBpbnQgdSwgdiwgYzsKfSBlW05dOwoKdm9pZCBkZnMoaW50IHUsIGludCBwYXIpIHsKICAgIHRpblt1XSA9ICsrdGltZXI7CiAgICB0b3VyW3RpbWVyXSA9IHU7CiAgICBmb3IoaWkgeCA6IEdbdV0pIHsKICAgICAgICBpbnQgdiwgdzsgdGllKHYsIHcpID0geDsKICAgICAgICBpZiAodiA9PSBwYXIpIGNvbnRpbnVlOwogICAgICAgIGhpZ2hbdl0gPSBoaWdoW3VdICsgdzsKICAgICAgICBkZnModiwgdSk7CiAgICAgICAgdG91clsrK3RpbWVyXSA9IHU7CiAgICB9Cn0KCiNkZWZpbmUgTUlOX0hJR0goeCwgeSkgKGhpZ2hbeF0gPCBoaWdoW3ldID8geCA6IHkpCmludCBMQ0EoaW50IHUsIGludCB2KSB7CiAgICBpbnQgbCA9IHRpblt1XTsKICAgIGludCByID0gdGluW3ZdOwogICAgaWYgKGwgPiByKSBzd2FwKGwsIHIpOwogICAgaW50IGsgPSBfX2xnKHIgLSBsICsgMSk7CiAgICByZXR1cm4gTUlOX0hJR0gobWluSGlnaFtsXVtrXSwgbWluSGlnaFtyIC0gTUFTSyhrKSArIDFdW2tdKTsKfQoKbGwgZGlzdChpbnQgdSwgaW50IHYpIHsKICAgIGludCBwID0gTENBKHUsIHYpOwogICAgcmV0dXJuIGhpZ2hbdV0gKyBoaWdoW3ZdIC0gMiAqIGhpZ2hbcF07Cn0KCnN0cnVjdCBEU1UgewogICAgdmVjdG9yPGludD4gbGFiLCBsX2RpYSwgcl9kaWE7CiAgICB2ZWN0b3I8bGw+IGRpYW1ldGVyOwogICAgdmVjdG9yPGFycmF5PGludCwgMz4+IGhpc3Rvcnk7CiAgICBsbCBteF9kaWE7CiAgICBEU1UoaW50IG4gPSAwKTogbGFiKG4gKyA1LCAtMSksIGxfZGlhKG4gKyA1LCAwKSwgcl9kaWEobiArIDUsIDApLCBoaXN0b3J5KCksIGRpYW1ldGVyKG4gKyA1LCAwKSwgbXhfZGlhKDApIHsKICAgICAgICBGT1IoaSwgMSwgbikgbF9kaWFbaV0gPSByX2RpYVtpXSA9IGk7CiAgICB9CgogICAgaW50IHJvb3QoaW50IHYpIHsKICAgICAgICByZXR1cm4gKGxhYlt2XSA8IDAgPyB2IDogcm9vdChsYWJbdl0pKTsKICAgIH0KCiAgICBib29sIHVuaXRlKGludCB1LCBpbnQgdikgewogICAgICAgIHUgPSByb290KHUpOwogICAgICAgIHYgPSByb290KHYpOwogICAgICAgIGlmICh1ID09IHYpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAobGFiW3VdID4gbGFiW3ZdKSBzd2FwKHUsIHYpOwogICAgICAgIGludCBsID0gbF9kaWFbdV0sIHIgPSByX2RpYVt1XTsKICAgICAgICBpZiAoZGlzdChsX2RpYVt1XSwgbF9kaWFbdl0pID4gZGlzdChsLCByKSkgbCA9IGxfZGlhW3VdLCByID0gbF9kaWFbdl07CiAgICAgICAgaWYgKGRpc3QobF9kaWFbdV0sIHJfZGlhW3ZdKSA+IGRpc3QobCwgcikpIGwgPSBsX2RpYVt1XSwgciA9IHJfZGlhW3ZdOwogICAgICAgIGlmIChkaXN0KHJfZGlhW3VdLCBsX2RpYVt2XSkgPiBkaXN0KGwsIHIpKSBsID0gcl9kaWFbdV0sIHIgPSBsX2RpYVt2XTsKICAgICAgICBpZiAoZGlzdChyX2RpYVt1XSwgcl9kaWFbdl0pID4gZGlzdChsLCByKSkgbCA9IHJfZGlhW3VdLCByID0gcl9kaWFbdl07CiAgICAgICAgaWYgKGRpc3QobF9kaWFbdl0sIHJfZGlhW3ZdKSA+IGRpc3QobCwgcikpIGwgPSBsX2RpYVt2XSwgciA9IHJfZGlhW3ZdOwoKICAgICAgICBoaXN0b3J5LnBiKHswLCB1LCBsYWJbdV19KTsKICAgICAgICBoaXN0b3J5LnBiKHswLCB2LCBsYWJbdl19KTsKICAgICAgICBoaXN0b3J5LnBiKHsxLCB1LCBsX2RpYVt1XX0pOwogICAgICAgIGhpc3RvcnkucGIoezIsIHUsIHJfZGlhW3VdfSk7CiAgICAgICAgaGlzdG9yeS5wYih7MywgdSwgZGlhbWV0ZXJbdV19KTsKICAgICAgICBoaXN0b3J5LnBiKHs0LCAtMSwgbXhfZGlhfSk7CiAgICAgICAgbGFiW3VdICs9IGxhYlt2XTsKICAgICAgICBsYWJbdl0gPSB1OwogICAgICAgIGlmIChtYXhpbWl6ZShkaWFtZXRlclt1XSwgZGlzdChsLCByKSkpIGxfZGlhW3VdID0gbCwgcl9kaWFbdV0gPSByOwogICAgICAgIG1heGltaXplKG14X2RpYSwgZGlhbWV0ZXJbdV0pOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHZvaWQgc25hcF9zaG90KCkgewogICAgICAgIGhpc3RvcnkucGIoey0xLCAtMSwgLTF9KTsKICAgIH0KCiAgICB2b2lkIHJvbGxfYmFjaygpIHsKICAgICAgICB3aGlsZSghaGlzdG9yeS5lbXB0eSgpKSB7CiAgICAgICAgICAgIGF1dG8gVCA9IGhpc3RvcnkuYmFjaygpOyBoaXN0b3J5LnBvcF9iYWNrKCk7CiAgICAgICAgICAgIGlmIChUWzBdID09IC0xKSBicmVhazsKICAgICAgICAgICAgaWYgKFRbMF0gPT0gMCkgbGFiW1RbMV1dID0gVFsyXTsKICAgICAgICAgICAgaWYgKFRbMF0gPT0gMSkgbF9kaWFbVFsxXV0gPSBUWzJdOwogICAgICAgICAgICBpZiAoVFswXSA9PSAyKSByX2RpYVtUWzFdXSA9IFRbMl07CiAgICAgICAgICAgIGlmIChUWzBdID09IDMpIGRpYW1ldGVyW1RbMV1dID0gVFsyXTsKICAgICAgICAgICAgaWYgKFRbMF0gPT0gNCkgbXhfZGlhID0gVFsyXTsKICAgICAgICB9CiAgICB9Cn0gZHN1OwppbnQgYW5zW05dOwoKdm9pZCBEbkMoaW50IHFyeUwsIGludCBxcnlSLCBpbnQgYW5zTCwgaW50IGFuc1IpIHsKICAgIGlmIChxcnlMID4gcXJ5UikgcmV0dXJuOwogICAgaW50IHFyeU0gPSAocXJ5TCArIHFyeVIpID4+IDEsIGFuc00gPSBtYXgoYW5zTCwgcXJ5TSArIDEpOwogICAgZHN1LnNuYXBfc2hvdCgpOwogICAgRk9SKGksIHFyeUwsIHFyeU0pIGRzdS51bml0ZShlW2ldLnUsIGVbaV0udik7CiAgICBpZiAoZHN1Lm14X2RpYSA+IGspIHsKICAgICAgICBkc3Uucm9sbF9iYWNrKCk7CiAgICAgICAgRG5DKHFyeUwsIHFyeU0gLSAxLCBhbnNMLCBhbnNSKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgRk9SUihpLCBhbnNSLCBtYXgoYW5zTCwgcXJ5TSkpIHsKICAgICAgICBkc3UudW5pdGUoZVtpXS51LCBlW2ldLnYpOwogICAgICAgIGlmIChkc3UubXhfZGlhID4gaykgewogICAgICAgICAgICBhbnNNID0gaSArIDE7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICBhbnNbcXJ5TV0gPSBhbnNNOwogICAgaWYgKGFuc00gPT0gYW5zUiArIDEpIHsKICAgICAgICBkc3Uucm9sbF9iYWNrKCk7CiAgICAgICAgRG5DKHFyeUwsIHFyeU0gLSAxLCBhbnNMLCBhbnNSKTsKICAgICAgICBkc3Uuc25hcF9zaG90KCk7CiAgICAgICAgRk9SKGksIHFyeUwsIHFyeU0pIGRzdS51bml0ZShlW2ldLnUsIGVbaV0udik7CiAgICAgICAgRG5DKHFyeU0gKyAxLCBxcnlSLCBhbnNMLCBhbnNSKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZHN1LnJvbGxfYmFjaygpOwoKICAgIGRzdS5zbmFwX3Nob3QoKTsKICAgIEZPUihpLCBhbnNNICsgMSwgYW5zUikgZHN1LnVuaXRlKGVbaV0udSwgZVtpXS52KTsKICAgIERuQyhxcnlMLCBxcnlNIC0gMSwgYW5zTCwgYW5zTSk7CiAgICBkc3Uucm9sbF9iYWNrKCk7CgogICAgZHN1LnNuYXBfc2hvdCgpOwogICAgRk9SKGksIHFyeUwsIHFyeU0pIGRzdS51bml0ZShlW2ldLnUsIGVbaV0udik7CiAgICBEbkMocXJ5TSArIDEsIHFyeVIsIGFuc00sIGFuc1IpOwogICAgZHN1LnJvbGxfYmFjaygpOwp9Cgp2b2lkIGluaXQodm9pZCkgewogICAgY2luID4+IG4gPj4gazsKICAgIEZPUihpLCAxLCBuIC0gMSkgewogICAgICAgIGludCB1LCB2LCBjOwogICAgICAgIGNpbiA+PiB1ID4+IHYgPj4gYzsKICAgICAgICBHW3VdLnBiKG1wKHYsIGMpKTsKICAgICAgICBHW3ZdLnBiKG1wKHUsIGMpKTsKICAgICAgICBlW2ldID0ge3UsIHYsIGN9OwogICAgfQp9Cgp2b2lkIHByb2Nlc3Modm9pZCkgewogICAgZGZzKDEsIC0xKTsKICAgIEZPUihpLCAxLCB0aW1lcikgbWluSGlnaFtpXVswXSA9IHRvdXJbaV07CiAgICBGT1IoaiwgMSwgMTkpIEZPUihpLCAxLCB0aW1lciAtIE1BU0soaikgKyAxKSBtaW5IaWdoW2ldW2pdID0gTUlOX0hJR0gobWluSGlnaFtpXVtqIC0gMV0sIG1pbkhpZ2hbaSArIE1BU0soaiAtIDEpXVtqIC0gMV0pOwoKICAgIGludCByID0gMDsKICAgIGxsIHJlcyA9IDA7CiAgICBkc3UgPSBEU1Uobik7CiAgICBGT1JSKGksIG4gLSAxLCAxKSB7CiAgICAgICAgZHN1LnVuaXRlKGVbaV0udSwgZVtpXS52KTsKICAgICAgICBpZiAoZHN1Lm14X2RpYSA+IGspIHsKICAgICAgICAgICAgciA9IGkgKyAxOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICBpZiAociA9PSAwKSB7CiAgICAgICAgY291dCA8PCAxTEwgKiBuICogKG4gLSAxKSAvIDI7CiAgICAgICAgZXhpdCgwKTsKICAgIH0gZWxzZSByZXMgKz0gbiArIDEgLSByOwoKICAgIGRzdSA9IERTVShuKTsKICAgIEZPUihpLCAxLCBuIC0gMSkgYW5zW2ldID0gbiArIDE7CiAgICBEbkMoMSwgbiAtIDEsIDEsIG4gLSAxKTsKICAgIEZPUihpLCAxLCBuIC0gMSkgcmVzICs9IG4gKyAxIC0gYW5zW2ldOwogICAgY291dCA8PCByZXM7Cn0KCnNpZ25lZCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgaWYgKGZvcGVuKHRhc2siLmlucCIsICJyIikpIHsKICAgICAgICBmcmVvcGVuKHRhc2siLmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4odGFzayIub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQogICAgaW50IHRjID0gMTsKLy8gICAgY2luID4+IHRjOwogICAgd2hpbGUodGMtLSkgewogICAgICAgIGluaXQoKTsKICAgICAgICBwcm9jZXNzKCk7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=