제출 #466109

#제출 시각아이디문제언어결과실행 시간메모리
466109SirCovidThe19thIli (COI17_ili)C++17
100 / 100
1167 ms1476 KiB
#include <bits/stdc++.h> using namespace std; int n, m; vector<char> A; vector<int> in[20005]; void set0(vector<char> &X, int i){ X[i] = '0'; for (auto nxt : in[i]) if (X[nxt] != '0') set0(X, nxt); } bool can(vector<char> &X){ for (int i = n; i < n + m; i++){ char &in1 = X[in[i][0]], &in2 = X[in[i][1]], &cur = X[i]; if (in1 == '0' and in2 == '0') cur = '0'; else if (in1 == '1' or in2 == '1') cur = '1'; if (A[i] != '?' and cur != A[i]) return 0; } return 1; } int main(){ cin >> n >> m; A.resize(n + m); for (int i = 0; i < n + m; i++){ if (i < n) A[i] = '?'; else cin >> A[i]; } for (int i = n, u, v; i < n + m; i++){ string a, b; cin >> a >> b; u = stoi(a.substr(1)) + (a[0] == 'c' ? n : 0); v = stoi(b.substr(1)) + (b[0] == 'c' ? n : 0); in[i].push_back(u - 1); in[i].push_back(v - 1); } for (int i = n; i < n + m; i++) if (A[i] == '0') set0(A, i); for (int i = n; i < n + m; i++){ if (A[i] == '?'){ vector<char> tmp0 = A, tmp1 = A; bool ok0, ok1; set0(tmp0, i); tmp1[i] = '1'; A[i] = '0'; ok0 = can(tmp0); A[i] = '1'; ok1 = can(tmp1); A[i] = '?'; cout<<((ok0 and ok1) ? "?" : to_string(ok1)); } else cout<<A[i]; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...