# 題目

zerojudge c889. 2. 二分圖

# 解題思路

目前沒東西...

# 程式碼

#include <bits/stdc++.h>
using namespace std;
#define Rabbir_Reaper ios::sync_with_stdio(0);cin.tie();
#define N 100005
vector<int> adj[N];
int visit[N];
int black,white,tblack,twhite;
void dfs(int pos){
    if(visit[pos]==1) tblack++;
    if(visit[pos]==2) twhite++;
    for(auto &u:adj[pos]){
        if(visit[u]==0){
            visit[u]=3-visit[pos];
            dfs(u);
        }else if(visit[u] != 3-visit[pos]){
            tblack=-1;
            twhite=0;
            break;
        }
    }
}
int main(){
    Rabbir_Reaper
    int n,m;
    cin>>n>>m;
    for(int i=0,u,v;i<m;i++){
        cin>>u>>v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    for(int i=0;i<n;i++){
        if(visit[i]==0){
            visit[i]=1;
            dfs(i);
            black+=min(tblack,twhite);
            white+=max(tblack,twhite);
            if(tblack == -1){
                black=0;
                break;
            }
            tblack=0;
            twhite=0;
        }
    }
    cout<<black;
}
更新於 閱讀次數 次