#include <bits/stdc++.h>
using namespace std;
template <typename Arg1>
void __f(const char* name, Arg1&& arg1) {
  std::cerr << name << " : " << arg1 << "\n";
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args) {
  const char* comma = strchr(names + 1, ',');
  std::cerr.write(names, comma - names) << " : " << arg1 << " | ";
  __f(comma + 1, args...);
}
inline string inttos(long long int a) {
  std::stringstream soso;
  soso << a;
  return soso.str();
}
inline long long int stoint(const std::string& s) {
  std::stringstream soso;
  soso << s;
  long long x;
  soso >> x;
  return x;
}
inline std::string inttobin(long long int x) {
  return std::bitset<7>(x).to_string();
}
inline void swp(long long int& a, long long int& b) {
  auto temp = a;
  a = b;
  b = temp;
}
const long long int N = 100005;
vector<pair<long long int, long long int> > graph[N];
long long int main_sum = 0;
struct ele {
  long long int x, y, z;
};
class comp {
 public:
  bool operator()(ele x, ele y) { return x.x < y.x; }
};
priority_queue<ele, vector<ele>, comp> pq;
bool vis[N];
long long int cntleaf(long long int root) {
  vis[root] = 1;
  if (graph[root].size() == 1 && vis[graph[root][0].first] == true) return 1;
  long long int sum = 0;
  for (auto x : graph[root]) {
    if (vis[x.first] == true) continue;
    long long int leaf = cntleaf(x.first);
    sum += leaf;
    long long int diff = (x.second - x.second / 2) * leaf;
    pq.push({diff, x.second, leaf});
    main_sum += leaf * x.second;
  }
  return sum;
}
void solve() {
  long long int n, s;
  cin >> n >> s;
  main_sum = 0;
  while (!pq.empty()) pq.pop();
  for (long long int i = 0; i < N; ++i) graph[i].clear(), vis[i] = false;
  for (long long int i = 0; i < n - 1; ++i) {
    long long int x, y, w;
    cin >> x >> y >> w;
    graph[x].push_back({y, w});
    graph[y].push_back({x, w});
  }
  cntleaf(1);
  long long int cnt = 0;
  while (main_sum > s) {
    ele temp = pq.top();
    pq.pop();
    main_sum -= temp.x;
    long long int wt = temp.y;
    long long int leaf = temp.z;
    wt /= 2;
    cnt++;
    long long int diff = (wt - wt / 2) * leaf;
    pq.push({diff, wt, leaf});
  }
  cout << cnt << "\n";
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long int t = 1;
  cin >> t;
  for (long long int i = 0; i < t; i++) {
    solve();
  }
}
