样例最后一组数据挂了,输出168
#include<bits/stdc++.h>
#define ll long long
#define db long double
#define clr fflush(stdout)
#define pii std::pair<int,int>
#define N 200005
#define Md 1000000007
#define Nd 998244353
#define Inf 0x3f3f3f3f
using namespace std;
int T,n;
vector<int> tr[N];
bool isl[N];
bool isr[N];
int cntl;
int cntr[N];
ll ans;
int siz[N];
void dfs(int u,int fa){
cntr[u]=(isr[u]?1:0);
siz[u]=1;
for(int to:tr[u])
if(to!=fa){
dfs(to,u);
cntr[u]+=cntr[to];
siz[u]+=siz[to];
}
}
ll s;
void dfs2(int u,int fa,int lst){
if(isr[u]&&!isl[u]){
s=lst;
for(int to:tr[u])
if(to!=fa) s+=siz[to]-cntr[to];
for(int to:tr[u])
if(to!=fa&&!isl[to]) ans+=s-(siz[to]-cntr[to]);
if(!isl[fa]) ans+=s-lst;
}
for(int to:tr[u])
if(to!=fa) dfs2(to,u,lst+(isr[u]?0:1));
}
int main(){
scanf("%d",&T);
while(T--){
for(int i=1;i<=n;i++){
isl[i]=0;
isr[i]=0;
tr[i].clear();
cntr[i]=0;
siz[i]=0;
}
scanf("%d",&n);
for(int i=1,u,v;i<n;i++){
scanf("%d%d",&u,&v);
tr[u].push_back(v);
tr[v].push_back(u);
}
cntl=0;
for(int i=1;i<=n;i++)
if(tr[i].size()==1) isl[i]=1,cntl++;
ans=cntl*(ll)(n-cntl);
for(int i=1;i<=n;i++){
if(isl[i]) isr[i]=1;
for(int j:tr[i]) if(isl[j]) isr[i]=1;
}
dfs(1,0);
dfs2(1,0,0);
printf("%lld\n",ans);
}
return 0;
}