#include <bits/stdc++.h>
using namespace std;
const long long M = 1e9 + 7;
const double PI = 2.0 * acos(0);
const string here = "here\n";
const string yes = "YES\n";
const string no = "NO\n";
long long binpow(long long a, long long p) {
  long long res = 1;
  for (; p; p >>= 1ll) {
    if (p & 1) res = (1ll * res * a) % M;
    a = (1ll * a * a) % M;
  }
  return res;
}
const long long N = 100100;
vector<pair<long long, long long> > adj[N];
long long vis[N], par[N], sub[N], w[N];
void dfs(long long u) {
  vis[u] = 1;
  if ((long long)adj[u].size() == 1 && u != 1) {
    sub[u] = 1;
    return;
  }
  for (pair<long long, long long> &v : adj[u]) {
    if (!vis[v.first]) {
      w[v.first] = v.second;
      par[v.first] = u;
      dfs(v.first);
      sub[u] += sub[v.first];
    }
  }
}
void precomp() {}
void solve() {
  long long n, m, i, j, k, l, s;
  cin >> n >> s;
  for (long long i = 0; i < (n); i++) {
    adj[i + 1].clear();
    vis[i + 1] = 0, sub[i + 1] = 0, w[i + 1] = 0;
  }
  for (long long i = 0; i < (n - 1); i++) {
    cin >> j >> k >> l;
    adj[j].emplace_back(k, l);
    adj[k].emplace_back(j, l);
  }
  long long sum = 0;
  dfs(1);
  long long ans = 0;
  priority_queue<pair<long long, long long> > pq;
  for (long long i = 2; i <= n; ++i) {
    sum += (w[i] * sub[i]);
    pq.push({((w[i] - (w[i] / 2)) * sub[i]), i});
  }
  while (sum > s) {
    pair<long long, long long> u = pq.top();
    pq.pop();
    ans++;
    long long temp = u.first;
    w[u.second] /= 2;
    long long y = (sub[u.second] * (w[u.second] - (w[u.second] / 2)));
    sum -= temp;
    pair<long long, long long> xx = {y, u.second};
    pq.push(xx);
  }
  cout << ans << '\n';
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  precomp();
  long long t = 1;
  cin >> t;
  while (t--) solve();
  return 0;
}
