一开始没开long long 拿了23分 一直以为自己想错了,想了半天感觉自己没毛病,后来换成long long 就拿满了
这个题的简单解法其实就是一个深搜 毕竟都是二分图了所以直接染色
找到 染成1的点的个数 和染成2 的点的个数
相乘是1和2相连的所有情况
减去已经连好的边就是结果
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N =1000010;
int e[N*2],ne[N*2],h[N];
int idx;
int color[N];
int cnt;
int a,b;
void add(int x,int y)
{
e[idx]=y; ne[idx]=h[x]; h[x] = idx++;
}
void dfs(int u,int c)
{
color[u]=c;
if(c==1){a++;}
else b++;
for(int i=h[u];i!=-1;i=ne[i])
{
int j=e[i];
if(color[j]==0){dfs(j,3-c);}
}
return ;
}
signed main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n;
cin>>n;
memset(h,-1, sizeof h);
for(int i=1;i<n;i++)
{
int u,v;
cin>>u>>v;
add(u,v);
add(v,u);
}
dfs(1,1);
cout<<a*b-n+1;
}