[AtCoder Code Festival 2017 QualB C/At3574] 3 Steps - 二分图染色,结论

给你一个n个点m条边的无向图,进行以下操作 如果存在两个点u和v,使得从u走三步能恰好到达v,那么在u和v之间连接一条边
重复这个操作直到不能再连接新的边,问最后有多少条边?
n, m <= 100000

如果一个连通块包含奇环它一定会变成完全图

如果一个连通块没有奇环,那么它一定是二分图,二分图一定会变成“完全二分图”

#include 
using namespace std;

#define int long long
const int N = 1000005;
vector  g[N];
int n,m,c[N],ans,s1,s2,vis[N],flag,tot;

void dfs(int p) {
    ++tot;
    if(c[p]==1) s1++;
    if(c[p]==2) s2++;
    vis[p]=1;
    for(int i=0;i

你可能感兴趣的:([AtCoder Code Festival 2017 QualB C/At3574] 3 Steps - 二分图染色,结论)