#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define maxn 110
struct node{
int next,to;
node(){}
node(int nn,int tt){
next=nn; to=tt;
}
}G[maxn*maxn];
int head[maxn];
int tot=0;
int col[maxn];
int rd[maxn][maxn];
void Init(){
memset(head,-1,sizeof(head));
memset(col,-1,sizeof(col));
memset(rd,0,sizeof(rd));
tot=0;
}
void addedge(int u,int v){
G[tot].to=v;
G[tot].next=head[u];
head[u]=tot++;
}
bool dfs(int u,int c){
col[u]=c;
for(int i=head[u];i!=-1;i=G[i].next){
int v=G[i].to;
if(col[v]!=-1){
if(col[v]==c) return 0;
continue;
}
if(!dfs(v,1-c)) return 0;
}
return 1;
}
int N;
int main(){
while(~scanf("%d",&N)){
Init();
for(int i=1;i<=N;i++){
int t=1;
while(1){
scanf("%d",&t);
if(!t) break;
rd[i][t]=1;
}
}
for(int i=1;i<=N;i++){
for(int j=i+1;j<=N;j++){
if(!rd[i][j]||!rd[j][i]){
addedge(i,j);
addedge(j,i);
}
}
}
bool ok=1;
for(int i=1;i<=N;i++){
if(col[i]==-1&&!dfs(i,0)){
ok=0;
break;
}
}
if(ok) printf("YES\n");
else printf("NO\n");
}
return 0;
}
HDU 4751 Divide Groups (判斷二分圖染色模板)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.