Submission #1081868

#TimeUsernameProblemLanguageResultExecution timeMemory
1081868juicyIli (COI17_ili)C++17
7 / 100
1 ms1372 KiB
#include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include "debug.h" #else #define debug(...) 42 #endif const int N = 10005; int n, m; int res[2 * N]; bitset<N> c[N]; vector<int> g[N]; void dfs(int u) { res[u] = 0; if (u <= m) { for (int v : g[u]) { if (res[v]) { res[v] = 0; dfs(v); } } } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; string s; cin >> s; s = '&' + s; for (int i = 1; i <= m; ++i) { for (int j = 0; j < 2; ++j) { char c; int x; cin >> c >> x; x += c == 'x' ? m : 0; g[i].push_back(x); } } memset(res, -1, sizeof(res)); for (int i = 1; i <= m; ++i) { if (s[i] == '0') { dfs(i); } else if (s[i] == '1') { res[i] = 1; } for (int v : g[i]) { if (v <= m) { c[i] |= c[v]; } else { c[i].set(v - m); } } } for (int i = 1; i <= m; ++i) { if (!res[g[i][0]] && !res[g[i][1]]) { res[i] = 0; } } for (int i = 1; i <= m; ++i) { if (res[i] == -1) { res[i] = 0; bool flg = 0; for (int j = 1; j <= m; ++j) { if (res[j] == 1) { bool cant = 1; for (int v : g[j]) { if (v <= m) { cant &= !res[v]; } else { cant &= !res[v] || c[i].test(v - m); } } if (cant) { flg = 1; break; } } } res[i] = flg ? 1 : -1; } } for (int i = 1; i <= m; ++i) { if (~res[i]) { cout << res[i]; } else { cout << "?"; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...