vector<int> G[maxn]; //图
int V; //顶点数
int col[maxn]; //顶点i的颜色(1 or -1)
//把顶点染成1或-1
bool dfs(int v, int c)
{
col[v] = c; //把顶点v染成颜色c
for (int i = 0; i < G[v].size(); i++){
//如果相邻的顶点同色,则返回false
if (col[G[v][i]] == c)
return false;
//如果相邻的顶点还没被染色,则染成-c
if (col[G[v][i]] == 0 && !dfs(G[v][i], -c))
return false;
}
//如果所有顶点都染过色了,则返回true
return true;
}
void solve()
{
for (int i = 0; i < V; i++){
if (col[i] == 0){
//如果顶点i还没被染色,则染成1
if (!dfs(i, 1)){
printf("No\n");
return;
}
}
}
printf("Yes\n");
}