#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
const int arr = 200005;
int pow(long long int x, long long int y, long long int p) {
  if (y == 0) return 1;
  if (y == 1) return x;
  x = x % p;
  long long int ans = pow(x, y / 2, p) % p;
  ans = ans * ans % p;
  if (y % 2 == 0)
    return ans % p;
  else
    return ans * x % p;
}
vector<int> cnt(arr, 0);
vector<bool> vis(arr, false);
vector<vector<int> > adj;
int dfs(int node) {
  vis[node] = true;
  int temp = 0;
  if (adj[node].size() == 1) temp++;
  for (int i = 0; i < adj[node].size(); i++) {
    if (!vis[adj[node][i]]) {
      temp += dfs(adj[node][i]);
    }
  }
  cnt[node] = temp;
  return temp;
}
void solve() {
  int n;
  cin >> n;
  long long int s, sum = 0;
  cin >> s;
  long long int ans = 0;
  long long int temp, a, b, sz, pos;
  adj.resize(n);
  long long int in[n - 1][3];
  long long int mul;
  for (int i = 0; i < n - 1; i++) {
    cin >> a >> b >> temp;
    a--;
    b--;
    adj[a].push_back(b);
    adj[b].push_back(a);
    in[i][0] = a;
    in[i][1] = b;
    in[i][2] = temp;
  }
  dfs(0);
  set<pair<long long int, int> > cst;
  pair<long long int, int> y;
  for (int i = 0; i < n - 1; i++) {
    a = in[i][0];
    b = in[i][1];
    pos = min(cnt[a], cnt[b]);
    in[i][0] = pos;
    temp = in[i][2];
    sum += pos * temp;
    mul = temp / 2;
    mul *= pos;
    cst.insert({pos * temp - mul, i});
  }
  set<pair<long long int, int> >::iterator itr;
  ans = 0;
  while (sum > s) {
    itr = cst.end();
    itr--;
    y = *itr;
    cst.erase(itr);
    pos = y.second;
    sum -= y.first;
    in[pos][2] /= 2;
    y.first = in[pos][2] * in[pos][0];
    mul = in[pos][2] / 2;
    mul *= in[pos][0];
    y.first -= mul;
    cst.insert(y);
    ans++;
  }
  cout << ans << "\n";
  for (int i = 0; i < n; i++) {
    cnt[i] = 0;
    vis[i] = false;
    adj[i].clear();
  }
}
int main() {
  cin.tie(0);
  cout.tie(0);
  ios_base::sync_with_stdio(0);
  int t = 1;
  cin >> t;
  int teh = t;
  while (t--) {
    solve();
  }
  return 0;
}
