天天看點

UVA 10004

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int v;
int q[20000];
int map[300][300], vis[300], val[300];
void bfs( int x )
{
	int front, rear, a = 0, nx, next;
	front = rear = 0;
	q[front++] = x;
	val[x] = 1;
	vis[x] = 1;
	while( front > rear )
	{		
		nx = q[rear++];
		if( val[nx] == 1 )
			a = 0;
		else
			a = 1;
		for( next = 0; next < v; next++ )
			if( map[nx][next] && !vis[next] ) 
			{
				val[next] = a;
				q[front++] = next;
				vis[next] = 1;
			}
	}
}
int main()
{
	int flag, e, i, x[300], y[300];
	while( scanf( "%d",  &v) && v )
	{
		memset( map, 0, sizeof(map) );
		memset( vis, 0, sizeof(vis) );
		scanf( "%d", &e );
		for( i = 0; i < e; i++ )
		{
			scanf( "%d%d", &x[i], &y[i] );
			map[x[i]][y[i]] = map[y[i]][x[i]] = 1;
		}
		bfs( x[0] );
		flag = 1;
		for( i = 0; i < e; i++ )
			if( val[x[i]] == val[y[i]] )
			{
				flag = 0;
				break;
			}
		if( flag )
			printf( "BICOLORABLE.\n" );
		else
			printf( "NOT BICOLORABLE.\n" );
	}
	return 0;
}