E、变异蛮牛
二分图染色的方式dfs一下,求出黑点数量
从中任意选出两个黑点即为答案数量res*(res+1)/2
#include<iostream>
#include<vector>
using namespace std;
const int N = 200010;
#define int long long
vector<int>e[N];
int n;
int res=0;
void dfs(int u,int fa,int f)
{
if(f)res++;
for(auto a:e[u])
if(a!=fa)dfs(a,u,!f);
}
signed main()
{
int T;
int a,b;
scanf("%lld",&T);
while(T--)
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)e[i].clear();
for(int i=1;i<n;i++)
{
scanf("%lld%lld",&a,&b);
e[a].push_back(b);
e[b].push_back(a);
}
res=0;
dfs(1,1,1);
printf("%lld\n",res*(res+1)/2);
}
}