zoukankan      html  css  js  c++  java
  • hihocoder #1121 : 二分图一•二分图判定

    二分图判断算法:
    
    到此我们就得到了整个图的算法:
    
    选取一个未染色的点u进行染色
    遍历u的相邻节点v:若v未染色,则染色成与u不同的颜色,并对v重复第2步;若v已经染色,如果 u和v颜色相同,判定不可行退出遍历。
    若所有节点均已染色,则判定可行。
    注意:有个能存在多个不连通的子图
    
    #include <cstdio>
    #include <cstring>
    #include <vector>
    
    using namespace std;
    const int N = 10010;
    vector<int>a[N];
    int color[N];
    
    bool dfs(int v)
    {
        //printf("%d
    ",v);
        for(int i = 0; i < a[v].size(); i++)
        {
            int u = a[v][i];
            if(color[u] == -1)
            {
                color[u] = 1-color[v];
                dfs(u);
            }
            else if(color[u] == color[v])
            {
                return false;
            }
        }
        return true;
    }
    
    int main()
    {
        int T;
        int n,m;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d %d",&n,&m);
            for(int i = 0; i < N; i++)
                color[i] = -1;
            for(int i = 0; i < N; i++)
                a[i].clear();
    
            for(int i = 0; i < m; i++)
            {
                int u,v;
                scanf("%d %d",&u,&v);
                u--,v--;
                int flag = 0;
                for(int j = 0; j < a[u].size(); j++)
                    if(a[u][j] == v)
                    {
                        flag= 1;
                        break;
                    }
                if(!flag && u!=v)
                {
                    a[u].push_back(v);
                    a[v].push_back(u);
                }
            }
            bool flag=true;
            for(int i = 0; i < n; i++)
            {
                 if(color[i]!=-1) continue;
                 color[i] = 1;
    
                 flag = dfs(i);
                 if(flag == false)
                    break;
            }
            if(!flag)
                printf("Wrong
    ");
            else
                printf("Correct
    ");
        }
        return 0;
    }
    
     
  • 相关阅读:
    53. Maximum Subarray
    Search Insert Position
    Single Number II
    260. Single Number III
    136. Single Number
    338. Counting Bits
    axios实现拦截器
    Vuex入门(5)—— 为什么要用Action管理异步操作
    ES6语法(3)—— 用promise()对象优雅的解决异步操作
    Vuex之理解Getters的用法
  • 原文地址:https://www.cnblogs.com/zendu/p/4981034.html
Copyright © 2011-2022 走看看