UVa 10004 Bicoloring (DFS&二分图)

10004 - Bicoloring

Time limit: 3.000 seconds

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=945

In 1976 the ``Four Color Map Theorem" was proven with the assistance of a computer. This theorem states that every map can be colored using only four colors, in such a way that no region is colored using the same color as a neighbor region.

Here you are asked to solve a simpler similar problem. You have to decide whether a given arbitrary connected graph can be bicolored. That is, if one can assign colors (from a palette of two) to the nodes in such a way that no two adjacent nodes have the same color. To simplify the problem you can assume:

no node will have an edge to itself.

the graph is nondirected. That is, if a node a is said to be connected to a node b, then you must assume that b is connected to a.

the graph will be strongly connected. That is, there will be at least one path from any node to any other node.

Input

The input consists of several test cases. Each test case starts with a line containing the number n ( 1 < n< 200) of different nodes. The second line contains the number of edges l. After this, l lines will follow, each containing two numbers that specify an edge between the two nodes that they represent. A node in the graph will be labeled using a number a ( ).

An input with n = 0 will mark the end of the input and is not to be processed.

Output

You have to decide whether the input graph can be bicolored or not, and print it as shown below.

Sample Input

3
3
0 1
1 2
2 0
9
8
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0

Sample Output

NOT BICOLORABLE.
BICOLORABLE.

简单的二分图判定问题,用邻接矩阵算了。

完整代码:

01./*0.025s*/
02.
03.#include<cstdio>
04.#include<cstring>
05.
06.int a[201][201], vist[202], t[202];
07.int n, m, p;
08.
09.int dfs()
10.{
11.    for (int i = 0; i < n; i++)
12.        for (int j = 0; j < n; j++)
13.            if (a[i][j])
14.            {
15.                if (t[i] && t[j] && vist[i] == vist[j])
16.                    return 0;
17.                else if (t[i] && !t[j])
18.                {
19.                    vist[j] = -vist[i];
20.                    t[j] = 1;
21.                }
22.                else if (!t[i] && t[j])
23.                {
24.                    vist[i] = -vist[j];
25.                    t[i] = 1;
26.                }
27.            }
28.    return 1;
29.}
30.
31.int main(void)
32.{
33.    while (scanf("%d%d", &n, &m), n)
34.    {
35.        memset(a, 0, sizeof(a));
36.        memset(vist, 0, sizeof(vist));
37.        memset(t, 0, sizeof(t));
38.        for (int i = 0; i < m; i++)
39.        {
40.            int c, d;
41.            scanf("%d%d", &c, &d);
42.            a[c][d]++;
43.        }
44.        vist[0] = 1;
45.        t[0] = 1;
46.        puts(dfs() ? "BICOLORABLE." : "NOT BICOLORABLE.");
47.    }
48.    return 0;
49.}

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int
, at&amp;amp;t汇编语言
, node
, jquery&amp;#39; is undefined
, graph
, 二分图
, Connected
, The
that
10004、程序异常10004、gb t10004、格拉苏蒂10004、gb t10004 2008,以便于您获取更多的相关知识。

时间: 2024-11-15 21:40:51

UVa 10004 Bicoloring (DFS&amp;二分图)的相关文章

uva 10004 - Bicoloring

点击打开链接 题目意思:给定n个节点,还有l条边,每一个节点只有两种颜色可以上,但只能选择一种,并且要求相邻的节点之间不能有相同的颜色,判断给定的数据是否满足,如果满足 #include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; const int MAXN = 210; int n , l , flag; int node[MA

UVa 10004:Bicoloring

题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=105 题目类型:搜索 题目: In 1976 the ``Four Color Map Theorem" was proven with the assistance of a computer. This theorem states that every map can be colored using on

二分图

什么是二分图 二分图又称作二部图,是图论中的一种特殊模型.设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集 (X,Y),并且图中的每条边(i,j) 关联的两个顶点i和j分别属于这两个不同的顶点集X和 Y , 则称图G为一个二分图. 什么是最大匹配 给定一个二分图G,在G的一个子图M中,M的边集中的任意两条边都不依附于同一个顶点,则称M是一个匹配. 选择这样的边数最大的子集称为图的最大匹配问题(maximalmatching problem) 如果一个匹配中,图中的每个顶点都和图

FZU 2039 pets

点击打开链接FZU2039 思路:二分图水题 分析:只要建模然后套模板ok 代码: /*DFS求二分图的最大匹配*/ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define MAXN 110 int T; int Nx , Ny , e;/*Nx Ny分别表示的是左右两边的最大的集合的个数*/ int G[MA

UVa 10603:Fill,经典倒水问题+隐式图搜索+dfs

题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=110&page=show_problem&problem=1544 类型: 隐式图搜索 原题: There are three jugs with a volume of a, b and c liters. (a, b, and c are positive integers not greater th

UVa 839 Not so Mobile:DFS二叉树

839 - Not so Mobile Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=104&page=show_problem&problem=780 Before being an ubiquous communications gadget, a mobile was just a structure mad

UVa 639 Don&#039;t Get Rooked:DFS好题

639 - Don't Get Rooked Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=108&page=show_problem&problem=580 In chess, the rook is a piece that can move any number of squares vertically o

UVa 699 The Falling Leaves:DFS遍历二叉树

699 - The Falling Leaves Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=640 Each year, fall in the North Central region is accompanied by the brilliant colors of the lea

UVa 548 Tree:中序遍历&amp;amp;后序遍历&amp;amp;DFS

548 - Tree Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=104&page=show_problem&problem=489 You are to determine the value of the leaf node in a given binary tree that is the termina