#include<stdio.h>
#include<iostream>
#include<vector>
#include<string.h>
#include<algorithm>
using namespace std;
#define maxn 10001
int V,E;//顶点数,边数
vector <int> G[maxn];
int color[maxn];
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 s,t;
memset(color,0,sizeof(color));
scanf("%d%d",&V,&E);
for(int i=0;i<E;i++){
scanf("%d%d",&s,&t);//无向图需要无向图从s到t和t到s都要存进去
G[s].push_back(t);
G[t].push_back(s);
}
solve();
for(int i=0;i<V;i++)
printf("%d ",color[i]);
}
二分图(挑战程序设计竞赛)
最新推荐文章于 2019-06-26 00:19:52 发布