美文网首页GraphTheory随笔-生活工作点滴
Graphcoloring |-牛客(二分图判定)

Graphcoloring |-牛客(二分图判定)

作者: 雨落八千里 | 来源:发表于2019-07-11 09:55 被阅读2次

Graphcoloring |

题意:

给一个无向完全连通图,试问这个图是不是二分图。假如是就输出各个点的染色情况。如果不是二分图就输出一个含奇数条边的环。

思路:

  • 采用染色法,并用数组记录每个点的父节点。方便输出奇数条边的环。
  • 其中vector数组vep存储的是点与点之间有边的关系。因为是无向图所以双向的。
  • fa数组存储的是每个点的父节点。
#include<bits/stdc++.h>
#define M 300010
using namespace std;
vector<int>vep[M];
int color[M];
int fa[M];
int n,m;
int flag;
int father,son;
void init( )
{
    for(int i=0;i<=n;i++)
    {
        vep[i].clear( );
        color[i]=-1;
        fa[i]=-1;
    }
    flag=1;
    son=-1;
    father=-1;
}
void dfs(int x,int k)
{
    color[x]=k;
    for(int i=0;i<vep[x].size( );i++)
    {
        int v=vep[x][i];
        if(color[v]==-1)
        {
            fa[v]=x;
            dfs(v,(k+1)%2);
        }
        else if(color[x]==color[v])
        {
            father=x;
            son=v;
            flag=0;
            return ;
        }
    }
}
int main( )
{
    
    scanf("%d%d",&n,&m);
    init( );
    int x,y;
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        vep[x].push_back(y);
        vep[y].push_back(x);
    }
    dfs(1,1);
    if(flag)
    {
       //cout<<son<<" "<<father<<endl;
        cout<<0<<endl;
        for(int i=1;i<=n;i++)
        {
           printf("%d ",color[i]);
        }
    }
    else
    {
        /* cout<<son<<" "<<father<<endl;
         for(int i=1;i<=n;i++)
        {
            cout<<fa[i]<<" ";

        }
        cout<<endl;*/
        queue<int>a;
        while(son!=father)
        {
            a.push(son);
            son=fa[son];
        }
        a.push(father);
        cout<<a.size( )<<endl;
        while(!a.empty( ))
        {
           printf("%d ",a.front( ));
           a.pop( );
        }
    }
   printf("\n");
    return 0;
}

相关文章

  • Graphcoloring |-牛客(二分图判定)

    Graphcoloring |题意:给一个无向完全连通图,试问这个图是不是二分图。假如是就输出各个点的染色情况。如...

  • 二分图

    二分图判定: 题目链接:二分图判定 dfs: 最大匹配: 题目链接:最大匹配-匈牙利算法 dfs: 二维最大匹配:...

  • 2018-01-16笔记

    BDD BDD: 二叉判定图(二分决策图) 1.A new dynamic heuristic binary de...

  • 数据结构不难12

    题目1 : 二分图一•二分图判定 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大...

  • 力扣 785 判断二分图

    题意:给定一堆graphes,判定他们是否是二分图 思路:遍历每一个二分图的节点,遍历的时候,检查相邻的两个节点不...

  • 二分图

    一个图是二分图当且仅当图中不含有奇数环 染色法判定二分图: 由于图中不含有奇数换,所以染色过程一定没有矛盾 如果一...

  • 牛客: 二分查找

    链接: https://blog.nowcoder.net/n/d87ec4b614484f6ba1ae85bee...

  • BFS及其应用

    内容概要: BFS类的实现 BFS求解连通分量 BFS求解无向图点对之间的一条最短路径 BFS判定无环图和二分图 ...

  • DFS及其应用

    内容概要: DFS类的实现 DFS求解连通分量 DFS求解点对之间的一个路径 DFS判定无环图和二分图 相关概念 ...

  • 【原创】又“东西”

    文/牛不牛语 晚高峰。 送到北国商城一客,刚往东走不远,叮咚,进来一单,东购,十二分钟,掉头向西。车流湍急,顾不上...

网友评论

    本文标题:Graphcoloring |-牛客(二分图判定)

    本文链接:https://www.haomeiwen.com/subject/wutrkctx.html