CodeForces 862B(思维+二分图染色)

题意

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;
}

  

猜你喜欢

转载自www.cnblogs.com/mcq1999/p/12004735.html