#include <bits/stdc++.h>
using namespace std;
void swap(long long int &x, long long int &y) {
  x = x ^ y;
  y = x ^ y;
  x = x ^ y;
}
template <typename T>
void print(T a) {
  for (auto i = a.begin(); i != a.end(); i++) cout << *i << " ";
  cout << endl;
}
bool isVowel(char c) {
  if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') return true;
  return false;
}
void sync() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
}
long long int sum = 0;
vector<long long int> leaves;
struct cmp {
  bool operator()(pair<long long int, long long int> p1,
                  pair<long long int, long long int> p2) const {
    return (p1.first - p1.first / 2) * p1.second >
           (p2.first - p2.first / 2) * p2.second;
  }
};
void dfs(long long int x, long long int par,
         vector<pair<long long int, long long int>> graph[],
         multiset<pair<long long int, long long int>, cmp> &pq) {
  for (pair<long long int, long long int> p : graph[x]) {
    if (p.first == par) {
      continue;
    } else {
      pq.insert({p.second, leaves[p.first]});
      sum += p.second * leaves[p.first];
      dfs(p.first, x, graph, pq);
    }
  }
}
void dfs1(long long int x, long long int par,
          vector<pair<long long int, long long int>> graph[]) {
  if (graph[x].size() == 1 && x != 0) {
    leaves[x] = 1;
    return;
  }
  for (pair<long long int, long long int> p : graph[x]) {
    if (p.first == par) continue;
    dfs1(p.first, x, graph);
    leaves[x] += leaves[p.first];
  }
}
int main() {
  sync();
  long long int t;
  cin >> t;
  for (long long int testcase = 1; testcase <= t; testcase++) {
    multiset<pair<long long int, long long int>, cmp> pq;
    leaves.clear();
    long long int n, s;
    cin >> n >> s;
    leaves.resize(n, 0);
    vector<pair<long long int, long long int>> graph[n];
    for (long long int i = 0; i < n - 1; i++) {
      long long int x, y, z;
      cin >> x >> y >> z;
      x--, y--;
      graph[x].push_back({y, z});
      graph[y].push_back({x, z});
    }
    sum = 0;
    dfs1(0, -1, graph);
    dfs(0, -1, graph, pq);
    long long int count = 0;
    while (sum > s) {
      pair<long long int, long long int> x = *pq.begin();
      long long int y = x.first;
      y /= 2;
      sum = sum - (x.first - y) * x.second;
      pq.erase(pq.begin());
      pq.insert({y, x.second});
      count++;
    }
    cout << count << endl;
  }
}
