首页 > 其他分享 >UVa 10004 Bicoloring (DFS&二分图)

UVa 10004 Bicoloring (DFS&二分图)

时间:2023-04-12 10:33:00浏览次数:50  
标签:10004 node vist int graph Bicoloring && input UVa


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.



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


完整代码:

/*0.025s*/

#include<cstdio>
#include<cstring>

int a[201][201], vist[202], t[202];
int n, m, p;

int dfs()
{
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			if (a[i][j])
			{
				if (t[i] && t[j] && vist[i] == vist[j])
					return 0;
				else if (t[i] && !t[j])
				{
					vist[j] = -vist[i];
					t[j] = 1;
				}
				else if (!t[i] && t[j])
				{
					vist[i] = -vist[j];
					t[i] = 1;
				}
			}
	return 1;
}

int main(void)
{
	while (scanf("%d%d", &n, &m), n)
	{
		memset(a, 0, sizeof(a));
		memset(vist, 0, sizeof(vist));
		memset(t, 0, sizeof(t));
		for (int i = 0; i < m; i++)
		{
			int c, d;
			scanf("%d%d", &c, &d);
			a[c][d]++;
		}
		vist[0] = 1;
		t[0] = 1;
		puts(dfs() ? "BICOLORABLE." : "NOT BICOLORABLE.");
	}
	return 0;
}




标签:10004,node,vist,int,graph,Bicoloring,&&,input,UVa
From: https://blog.51cto.com/u_5535544/6185186

相关文章

  • UVa 143 Orchard Trees (数学&计算几何&枚举)
    143-OrchardTreesTimelimit:3.000secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=79AnOrchardisthasplantedanorchardinarectanglewithtreesuniformlyspacedinbothdirections.T......
  • Semi-prime H-numbers UVA - 11105
     所有形如4n+1(n为非负整数)的数叫H数。定义1是唯一的单位H数,H素数是指本身不是1,且不能写成两个不是1的H数的乘积。H-半素数是指能写成两个H素数的乘积的H数(这两个数可以相同也可以不同)。 例如,25是H-半素数,但125不是。输入一个H数h(h≤1000001),输出1~h之间有多少个H-半素数。......
  • Zeros and Ones UVA - 12063
      给出n、k(n≤64,k≤100),有多少个n位(无前导0)二进制数的1和0一样多,且值为k的倍数?  f[i][j][k] #include<iostream>#include<cstring>#include<cmath>#include<algorithm>usingnamespacestd;#definelllonglongintn,m;llf[102][102][102];vo......
  • UVA1646 圈图的匹配 Edge Case
      n个点连成一个圆,求没有公共点的边集的个数不考虑第n条边f[n]=f[n-1]+f[n-2]现在考虑第n条边ans=f[n]+f[n-2] f=[0]*10005f[1]=1f[2]=2foriinrange(3,10004):f[i]=f[i-1]+f[i-2]while1:try:n=int(input())print(f[n]+f[n......
  • Divisors UVA - 294
    求区间[L,R]的整数中哪一个的正约数最多。  一个数因数分解后,它的约数Cnt=(a[j]+1)的乘积,j是每个因数的个数 #include<iostream>#include<cstring>#include<cmath>#include<algorithm>usingnamespacestd;constintM=1e5+30;#defineintlonglo......
  • Perfect P-th Powers UVA - 10622
     给出n,写成n=x^p的形式,求p最大值#include<iostream>#include<vector>#include<cmath>#include<algorithm>usingnamespacestd;#defineintlonglongintflg=0;intgcd(intx,inty){ returny==0?x:gcd(y,x%y);}voidsov(in......
  • Sum of Consecutive Prime Numbers UVA - 121
     #include<iostream>#include<cstring>#include<cmath>#include<algorithm>usingnamespacestd;constintM=1e4+33;intb[M],c[M],tot;ints[M];voidinit(inttop){memset(b,1,sizeofb);b[1]=0;inti,j;......
  • Sum of Different Primes UVA - 1213
     选择K个质数,使它们的和等于N。问有多少种方案?例如,n=24,k=2时有3种方案:5+19=7+17=11+13=24 #include<iostream>#include<cstring>#include<cmath>#include<algorithm>usingnamespacestd;constintM=1e6+33;intb[M],c[M],tot;intn,m,f[2000][20];......
  • Magical GCD UVA - 1642
     对序列A, 求(j-i+1)*gcd(i,i+1,...j)最大值 G(i)=gcd(G[i-1],a[i]) 即前缀值不升维护1~j-1可能的i 值(logn个) O(n*log^2#include<iostream>#include<map>#include<cmath>#include<algorithm>usingnamespacestd;constintN=......
  • Lighting System Design uva11400
    设计一个照明系统,一共有n(n<=1000)种灯泡可供选择,不同种类的灯泡必须用不同的电源,同一种灯泡则可以用一个,输入为一个n,以下n行,每行四个数值,代表电压V,电源费用K,每个灯泡费用C,所需灯泡数量L。n=0为结束标志。为了省钱,你可以把一些灯泡换成电压更高的以节省电源的钱,但不能换成更低的,......