将所有的边都用上(点可以重复)画出若干个子图,画图可知一个点比在两个不同的鸡爪图当中
#include<stdio.h>
#include<iostream>
#include<vector>
#include<string.h>
#include<algorithm>
using namespace std;
#define maxn 10002
int V;
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;
while(scanf("%d",&V)&&V)
{
memset(color,0,sizeof(color));
for(int i=0;i<maxn;i++)
G[i].clear();
while(scanf("%d%d",&s,&t))
{
if(!s && !t)break;
G[s].push_back(t);
G[t].push_back(s);
}
solve();
}
}