题意
https://vjudge.net/problem/CodeForces-862B
给出n个点,n-1条边,求再最多再添加多少边使得二分图的性质成立
思路
因为题目是求的最多添加多少边,所以可以对树01染色,然后让每个0点连上所有的黑点,一共有0的个数*1的个数条边。再减去树的n-1条边即可。
代码
#include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f #define ll long long const int N=200005; const int mod=1e9+7; const double eps=1e-8; const double PI = acos(-1.0); #define lowbit(x) (x&(-x)) vector<int> g[N]; ll col[N],num[2]; void dfs(int u,int fa) { for(int v:g[u]) { if(v==fa) continue; col[v]=col[u]^1; num[col[v]]++; dfs(v,u); } } int main() { std::ios::sync_with_stdio(false); int n; cin>>n; for(int i=1; i<n; i++) { int u,v; cin>>u>>v; g[u].push_back(v); g[v].push_back(u); } num[0]++; col[1]=0; dfs(1,0); cout<<num[0]*num[1]-(n-1)<<endl; return 0; }