#include <bits/stdc++.h> using namespace std; int dfs(vector<vector<pair<int,int>>>& edges,int v,vector<int>& can_be_saved,bool block,int parent) { int nodes=1; for(auto e:edges[v]) { if(e.first!=parent) { int x = dfs(edges,e.first,can_be_saved,(block|e.second),v); nodes += x; if(e.second==1 && !block) can_be_saved.push_back(x); } } return nodes; } void solve() { int n,k; cin >> n >> k; vector<vector<pair<int,int>>> edges(n+1); for(int i=0;i<n-1;i++) { int u,v,x; cin >> u >> v >> x; edges[u].push_back({v,x}); edges[v].push_back({u,x}); } vector<int> can_be_saved; dfs(edges,1,can_be_saved,0,-1); sort(can_be_saved.begin(),can_be_saved.end()); int infected = n, count=0; for(int i=can_be_saved.size()-1;i>=0 && infected>k;i--) { infected -= can_be_saved[i]; count++; } if(infected>k) cout << -1 << endl; else cout << count << endl; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int T; cin >> T; while(T--) { solve(); } return 0; }