bool _Start;
#include <bits/stdc++.h>
using namespace std;
#define il inline
#define Tp template<typename T>
#define Ts template<typename T,typename... _T>
#define pb push_back
Tp il void read(T& x) {
x=0;bool f=0;char c=getchar();
for(;c<'0'||c>'9';c=getchar()) f|=c=='-';
for(;c>='0'&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);
x=(f?-x:x);
}Ts il void read(T& x,_T&... y) {read(x),read(y...);}
#define int long long
const int N=1e6+5;
int n,ans,mx,son[N],pre;
vector<int> e[N];
int dep[N],del[N],Fa[N];
vector<int> dis[N],lf[N];
void dfs(int x,int fa) {
dep[x]=x==1?0:dep[fa]+1;
Fa[x]=fa;
mx=max(mx,dep[x]);
dis[dep[x]].pb(x);
for(auto y:e[x]) {
if(y==fa) continue;
dfs(y,x);
son[x]++;
del[x]+=del[y]+1;
}
if(!son[x]) lf[dep[x]].pb(x);
}
void erase(int x) {
if(x==1) return ;
pre++;
son[Fa[x]]--;
if(!son[Fa[x]]) erase(son[Fa[x]]);
}
bool _End;
signed main() {
fprintf(stderr,"Memory: %.4lf Mib\n",(&_End-&_Start)/1048576.0);
freopen("sp.in","r",stdin);
int _;read(_);
while(_--) {
read(n);
for(int i=1;i<=n;i++) e[i].clear(),dis[i].clear(),lf[i].clear(),son[i]=del[i]=0;
for(int i=1;i<n;i++) {
int x,y;read(x,y);
e[x].pb(y),e[y].pb(x);
}
mx=0;
dfs(1,0);
pre=0,ans=n-1;
for(int i=0;i<=n;i++) {
int res=0;
for(auto x:dis[i]) res+=del[x];
ans=min(ans,res+pre);
for(auto x:lf[i]) erase(x);
}
printf("%lld\n",ans);
}
return 0;
}
不知道为什么wa了/kel,有人能告诉原因或给个反例吗。