rt,感觉这玩意没有正确性但是过了 pretest 并且没有 fst。
# include <bits/stdc++.h>
# define int long long
# define pb push_back
using namespace std;
const int N = 3e5 + 5 , INF = 1e9;
int deg[N];
int n , cur , vis[N] , dep[N];
vector <int> g[N];
void dfs (int now , int fa , int col , int ing1 , int ing2) {
vis[now] = col;
for (auto x : g[now]) if (x != fa && x != ing1 && x != ing2) dfs (x , now , col , ing1 , ing2);
}
void dfs1 (int now , int fa) {
dep[now] = dep[fa] + 1;
for (auto x : g[now]) if (x != fa) dfs1 (x , now);
}
void solve () {
cin >> n , cur = 0;
for (int i = 1;i <= n;++i) g[i].clear() , vis[i] = 0 , deg[i] = 0 , dep[i] = 0;
for (int i = 1;i < n;++i) {
int u , v;
cin >> u >> v;
deg[u] ++ , deg[v] ++;
g[u].pb (v) , g[v].pb (u);
}
int id = 0;
deg[0] = -1;
dfs1(1 , 1);
for (int i = 1;i <= n;++i) if (deg[i] > deg[id] || (deg[i] == deg[id] && dep[i] > dep[id])) id = i;
for (auto x : g[id]) --deg[x];
int ing1 = id;
deg[0] = -1 , deg[id] = -1 , id = 0;
for (int i = 1;i <= n;++i) if (deg[i] > deg[id] || (deg[i] == deg[id] && dep[i] > dep[id])) id = i;
for (int i = 1;i <= n;++i) if (!vis[i] && i != ing1 && i != id) dfs (i , -1 , ++cur , ing1 , id);
return cout << cur << '\n' , void();
}
signed main () {
ios::sync_with_stdio(false) , cin.tie(0) , cout.tie(0);
int T;
cin >> T;
while (T--) solve();
}