对于输入一个图,能否用两个颜色将节点涂色,要求相邻的节点的颜色不一样;
#include <iostream>
#include<vector>
#include<cstdio>
using namespace std;
const int maxn=100000;
vector<int> g[maxn];//图 每个节点的相邻节点
int v; //顶点数
int color[maxn];//顶点的颜色-1,1,0
bool dfs(int v,int c) //深度搜索
{
color[v]=c; //顶点染色
for(int i=0;i<g[v].size();i++) //相邻顶点染色
{
if(color[g[v][i]]==c) //如果同色,则错误
return false;
if(color[g[v][i]]==0&&!dfs(g[v][i],-c)) return false; //对为染色的进行染色
}
return true; //全部通过则证明正确
}
void solve()
{ for(int i=0;i<v;i++)
{
if(color[i]==0)
{
if(!dfs(i,1))
{
printf("NO\n");
return;
}
}
}
printf("YES\n");
}
int main()
{
int k;
cin>>v>>k;
for(int i=0;i<k;i++)
{
int x,y;
cin>>x>>y;
g[x].push_back(y);
g[y].push_back(x);
}
solve();
return 0;
}