#include <bits/stdc++.h>
int kx[8] = {+2, +2, -2, -2, +1, +1, -1, -1};
int ky[8] = {+1, -1, +1, -1, +2, -2, +2, -2};
int d9x[9] = {+1, +1, +1, +0, +0, +0, -1, -1, -1};
int d9y[9] = {+1, +0, -1, +1, +0, -1, +1, +0, -1};
int dx4[4] = {+0, +0, +1, -1};
int dy4[4] = {+1, -1, +0, +0};
long long int gcd(unsigned long long int a, unsigned long long int b) {
  return (a == 0) ? b : gcd(b % a, a);
}
long long int lcm(unsigned long long int a, unsigned long long int b) {
  return a * (b / gcd(a, b));
}
const long long INF = 1e18;
using namespace std;
vector<int> ord;
vector<pair<int, int> > adj[100001];
long long int W[100001];
long long int mass[100001];
long long int desc[100001];
int par[100001];
void dfs_order(int at) {
  for (pair<int, int> edge : adj[at]) {
    int to = edge.first;
    if (to == par[at]) {
      continue;
    }
    par[to] = at;
    dfs_order(to);
  }
  ord.push_back(at);
}
long long int getdiff(int i) {
  return W[i] * 1ll * desc[i] - (W[i] / 2ll) * 1ll * desc[i];
}
int main() {
  int T;
  cin >> T;
  while (T--) {
    int n;
    cin >> n;
    long long int S;
    cin >> S;
    ord = {};
    for (int i = 0; i < n; ++i) {
      W[i] = 0ll;
      adj[i] = {};
      par[i] = -1;
      desc[i] = 0ll;
    }
    for (int i = 1; i < n; ++i) {
      int u, v;
      cin >> u >> v;
      --u, --v;
      cin >> mass[i];
      adj[u].push_back(make_pair(v, i));
      adj[v].push_back(make_pair(u, i));
    }
    dfs_order(0);
    priority_queue<pair<long long int, int>, vector<pair<long long int, int> >,
                   less<pair<long long int, int> > >
        PQ;
    long long int total = 0ll;
    for (int at : ord) {
      for (pair<int, int> edge : adj[at]) {
        int to = edge.first;
        if (to == par[at]) {
          W[at] = mass[edge.second];
          continue;
        }
        desc[at] += desc[to];
      }
      if (desc[at] == 0 && at != 0) {
        desc[at] = 1ll;
      }
      PQ.push(make_pair(getdiff(at), at));
      total += (W[at] * desc[at]);
    }
    int ans = 0;
    while (total > S) {
      pair<long long int, int> tmp = PQ.top();
      PQ.pop();
      int at = tmp.second;
      total -= getdiff(at);
      W[at] /= 2ll;
      PQ.push(make_pair(getdiff(at), at));
      ++ans;
    }
    cout << ans << endl;
  }
}
