传送门
思路:以所有bud为根节点 之后断开bud与其父节点的连线。最后能形成了若干个深度为2的子树。之后将一个子树放在另一个子树的叶子节点上 使得 叶子节点总数 -1
#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int inf=2e18+100;
const int maxn=2e5+100;
vector<int>g[maxn];
int son[maxn],f[maxn];
int sum,ye;
void dfs(int x,int fa)
{
son[x]=1;
for(auto it:g[x])
{
if(it==fa)continue;
dfs(it,x);
son[x]+=son[it];
}
if(son[x]>1)
{
ye+=son[x]-1;
sum++;
son[x]=0;
}
}
signed main()
{
IOS
int tt;
cin>>tt;
while(tt--)
{
sum=0;
ye=0;
int n;
cin>>n;
memset(son,0,sizeof(int)*(n+10));
for(int i=1; i<=n; i++)g[i].clear();
for(int i=1; i<n; i++)
{
int u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
dfs(1,-1);
cout<<ye-(sum-1)<<"\n";
}
}