#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
int map[105][105];
int pay[105];
int n;
queue<int>Q;
void init()
{
memset(pay,-1,sizeof(pay));
memset(map,0,sizeof(map));
while (!Q.empty())
{
Q.pop();
}
}
int BFS(int x)
{
int i,v;
Q.push(x);
pay[x]=0;
while (!Q.empty())
{
v=Q.front();
Q.pop();
for(i=1;i<=n;i++)
{
if(map[v][i])
{
if(pay[i]==-1)
{
pay[i]=1-pay[v];
Q.push(i);
}
else if(pay[v]==pay[i]) return 0;
}
}
}
return 1;
}
int main()
{
int k,i,x;
while (scanf("%d",&n)!=EOF)
{
init();
for (i=1;i<=n;i++)
{
while (scanf("%d",&x),x)
{
map[i][x]=1;
map[x][i]=1;
}
}
k=BFS(1);
if(k==0){printf("-1\n");continue;}
for (i=1;i<=n;i++)
printf("%d",pay[i]);
printf("\n");
}
return 0;
}
ural 1080. Map Coloring(二分染色bfs)
最新推荐文章于 2019-03-07 08:22:15 发布