ACWING860. 染色法判定二分图

ACWING860 染色法判定二分图

原题链接

描述

给定一个n个点m条边的无向图,图中可能存在重边和自环。

请你判断这个图是否是二分图。

思路

染色法判断二分图。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=100010,M=200010;
int n,m;
int color[N];
vector<int> adj[N];
bool dfs(int u,int c){
    color[u]=c;
    for(int v:adj[u]){
        if(!color[v]){
            if(!dfs(v,-1*c)) return false;
        }else if(color[v]==c){
            return false;
        }
    }
    return true;
}
int main(){
    scanf("%d%d",&n,&m);
    while(m--){
        int a,b;
        scanf("%d%d",&a,&b);
        adj[a].push_back(b); adj[b].push_back(a);
    }
    bool flag=true;
    for(int i=1;i<=n;i++){
        if(!color[i]){
            if(!dfs(i,1)){
                flag=false;
                break;
            }
        }
    }
    if(flag) puts("Yes");
    else puts("No");
    return 0;
}
posted @ 2021-01-24 23:02  ans20xx  阅读(37)  评论(0编辑  收藏  举报