• nyoj-1015-二分图判定


    二部图

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:1
     
    描述

    二部图又叫二分图,我们不是求它的二分图最大匹配,也不是完美匹配,也不是多重匹配,而是证明一个图是不是二部图。证明二部图可以用着色来解决,即我们可以用两种颜色去涂一个图,使的任意相连的两个顶点颜色不相同,切任意两个结点之间最多一条边。为了简化问题,我们每次都从0节点开始涂色

     
    输入
    输入:
    多组数据
    第一行一个整数 n(n<=200) 表示 n个节点
    第二行一个整数m 表示 条边
    随后 m行 两个整数 u , v 表示 一条边
    输出
    如果是二部图输出 BICOLORABLE.否则输出 NOT BICOLORABLE.
    样例输入
    3
    3
    0 1
    1 2
    2 0
    3
    2
    0 1

      着色法,默认1号点黑色然后连接的点上白色,遇见矛盾的说明不是二分图。
      
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define inf 0x3f3f3f3f
     4 int color[220];
     5 vector<int>g[220];
     6 bool dfs(int u,int fa){
     7     for(int i=0;i<g[u].size();++i){
     8         int v=g[u][i];
     9         if(v==fa) continue;
    10         if(color[v]==color[u]) return 0;
    11         if(!color[v]){
    12             color[v]=3-color[u];
    13             if(!dfs(v,u)) return 0;
    14         }
    15     }
    16     return 1;
    17 }
    18 int main() {
    19     int t,n,m,i,j;
    20     while(cin>>n>>m){
    21         for(i=1;i<=n;++i)g[i].clear();
    22         memset(color,0,sizeof(color));
    23         while(m--){
    24             scanf("%d%d",&i,&j);
    25             i++,j++;
    26             g[i].push_back(j);
    27             g[j].push_back(i);
    28         }
    29         color[1]=1;
    30         bool ok=dfs(1,0);
    31         if(ok) puts("BICOLORABLE.");
    32         else puts("NOT BICOLORABLE.");
    33     }
    34     return 0;
    35 }

    0 2
    样例输出
    NOT BICOLORABLE.
    BICOLORABLE.

      
  • 相关阅读:
    CentOS安装按进程实时统计流量情况工具NetHogs笔记
    修改centos地址连接为自动连接
    优秀博客主推荐链接
    idea制动补全返回值变量快捷键
    mongodb系列之--分片的原理与配置
    Mongodb系列之--mongodb的启动与关闭
    mongodb系列之---副本集配置与说明
    mongodb系列之--mongodb 主从配置与说明
    go 语言学习
    php模拟post与get请求
  • 原文地址:https://www.cnblogs.com/zzqc/p/9493227.html
Copyright © 2020-2023  润新知