1080
#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> #include <math.h> #include <limits.h> using namespace std; // Datatypes typedef vector<int> vi; typedef vector<string> vs; typedef vector<vi> vvi; typedef pair<int,int> ii; typedef long long ll; typedef long double ld; // Define #define sz(a) int((a).size()) #define pb push_back #define all(c) (c).begin(),(c).end() #define present(c,x) ((c).find(x) != (c).end()) #define cpresent(c,x) (find(all(c),x) != (c).end()) #define FOR(_i,_n) for(int (_i) = 0; (_i) < (_n); (_i)++) #define mp make_pair int st[100]; map< int, vi > m; int dfs(int v, int c) { if(st[v] == -1) { st[v] = c; FOR(i,sz(m[v])) { if(st[ m[v][i] ] == c) return 1; if(st[ m[v][i] ] == -1) { if(dfs(m[v][i], ((c == 0)?1:0))) return 1; } } } return 0; } int main(void) { int n; cin >> n; FOR(i,n) st[i] = -1; FOR(i,n) { int v; cin >> v; while(v != 0) { m[i].pb(v-1); cin >> v; } } FOR(i,n) { if(dfs(i, 0)) { cout << -1; return 0; } } FOR(i,n) cout << st[i]; return 0; }
page revision: 0, last edited: 10 May 2007 17:27