题意:给定无向图,假设共有 n 个点,m 条边,要给每个点染成 黑色 或 白色,并且要使得每条边所连接的每个顶点都是不一样的颜色,问是否存在这样的方案?
问法套路:分成两组 1组 2组,且1组2组之间有一定的关系
// 模版代码
int color[N];
bool dfs( int u , int c )
{color[u] = c;for( int i = h[u] ; i != -1 ; i = ne[i] ){int j = e[i];if( color[j] == -1 ){if( !dfs( j , !c ) ) return false;}else if( color[j] == c ) return false;}return true;
}
bool check()
{memset( color , -1 , sizeof color );for( int i = 1 ; i <= n ; i++){if( color[i] == -1 ){if( !dfs( i , 0 ) ) return false;}return true;
}
典题:
传送门:Problem - E - Codeforces
思路:建图 + 二分图染色
传送门:[NOIP2010 提高组] 关押罪犯 - 洛谷
思路:二分 + 二分图染色
传送门:封锁阳光大学 - 洛谷
思路:二分图染色 + 贪心