ll minodd = inf; // inf > sum of all elements ll sum = 0; while (l--) { int x; cin >> x; if (x & 1) { minodd = min<ll>(minodd, x); } sum += x; } ll sum2 = sum - minodd; // When there are no odd numbers, sum2 < 0 vector<vector<int>> E(2 * n); auto add = [&](int u, int v) { E[u].push_back(v); E[v].push_back(u); }; while (m--) { int u, v; cin >> u >> v; u--; v--; add(u, v + n); add(u + n, v); }
// BFS vector<int> dis(2 * n, -1); dis[0] = 0; queue<int> Q; Q.push(0); while (!Q.empty()) { int u = Q.front(); Q.pop(); for (auto& v : E[u]) { if (dis[v] != -1) continue; dis[v] = dis[u] + 1; Q.push(v); } }
string res(n, '0'); for (int i = 0; i < 2 * n; i++) { if (dis[i] == -1) continue; if (dis[i] % 2 == sum % 2) { if (dis[i] <= sum) { res[i % n] = '1'; } } else { if (dis[i] <= sum2) { res[i % n] = '1'; } } } cout << res << endl; }