/**
首先,这个图要满足边数的两倍等于点数乘3。
其次,由于一个爪的中心点不可能与另一个中心点相连,整个图相当于分成两个部分,
中心点和非中心点,所以这个图其实就是一个二分图。
满足这两个条件即可。
**/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
int color[305];
vector<int> G[305];
bool erfentu(int u)
{
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
if(color[v]==color[u]) return false;
if(!color[v])
{
color[v]=3-color[u];
if(!erfentu(v)) return false;
}
}
return true;
}
int main()
{
int n,m,a,b;
bool f;
while(scanf("%d",&n)!=EOF)
{
if(n==0) break;
m=0;
f=true;
memset(color,0,sizeof(color));
for(int i=0;i<=n;i++) G[i].clear();
while(scanf("%d%d",&a,&b))
{
if(a==0 && b==0) break;
G[a].push_back(b);
G[b].push_back(a);
m++;
}
if((m*2)!=(n*3)) f=false;
color[1]=1;
if(!erfentu(1)) f=false;
if(f) printf("YES\n");
else printf("NO\n");
}
}
uva 11396 二分图判定
最新推荐文章于 2020-10-12 23:02:37 发布