标签:hdu4751 divide groups dfs 二分匹配

3 3 0 1 0 1 2 0
YES
#include <cstdio>
#include <queue>
#include <cstring>
#define SIZE 110
using namespace std ;
bool map[SIZE][SIZE] ;
int color[SIZE] , n ;
bool bfs(int pos)
{
queue<int> que ;
que.push(pos) ;
color[pos] = 1 ;
while(!que.empty())
{
int now = que.front() ;
que.pop() ;
for(int i = 1 ; i <= n ; ++i)
{
if(map[now][i])
{
if(color[now] == color[i])
return false ;
else if(color[i] == 0)
{
color[i] = -color[now] ;
que.push(i) ;
}
}
}
}
return true ;
}
int main()
{
while(~scanf("%d",&n))
{
for(int i = 0 ; i <= n ; ++i)
for(int j = 0 ; j <= n ; ++j)
map[i][j] = true ;
for(int i = 1 ; i <= n ; ++i)
{
int id ;
while(scanf("%d",&id) && id)
{
map[i][id] = false ;
}
}
for(int i = 1 ; i <= n ; ++i)
map[i][i] = false ;
for(int i = 1 ; i <= n ; ++i)
{
for(int j = 1 ; j <= n ; ++j)
{
if(map[i][j])
map[j][i] = true ;
}
}
bool flag = false ;
memset(color,0,sizeof(color)) ;
for(int i = 1 ; i <= n ; ++i)
{
if(color[i] == 0)
if(!bfs(i))
{
flag = true ;
break ;
}
}
if(flag)
puts("NO") ;
else
puts("YES") ;
}
return 0 ;
}hdu 4751 Divide Groups 2—sat问题 还是未理解
标签:hdu4751 divide groups dfs 二分匹配
原文地址:http://blog.csdn.net/lionel_d/article/details/45343301