Submission #1190309

#TimeUsernameProblemLanguageResultExecution timeMemory
1190309TobIli (COI17_ili)C++20
100 / 100
791 ms79184 KiB
#include <bits/stdc++.h> #define F first #define S second #define all(x) x.begin(), x.end() #define pb push_back #define FIO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0) using namespace std; typedef long long ll; typedef pair <ll, ll> pii; const int N = 1e4 + 7; int n, m; string a; int c[2*N]; int adj[N][2]; bool co[N][N], d[N]; int main () { FIO; cin >> n >> m >> a; memset(c, -1, sizeof c); for (int i = 0; i < m; i++) if (a[i] != '?') c[i+n] = a[i]-'0'; for (int i = 0; i < m; i++) { for (int j = 0; j < 2; j++) { char cc; cin >> cc; int x; cin >> x; x--; if (cc == 'x') adj[i][j] = x; else adj[i][j] = x+n; } } for (int i = m-1; i >= 0; i--) if (!c[i+n]) { c[adj[i][0]] = c[adj[i][1]] = 0; a[i] = '0'; } for (int i = 0; i < m; i++) if (!c[adj[i][0]] && !c[adj[i][1]]) { c[i+n] = 0; a[i] = '0'; } for (int i = 0; i < m; i++) { for (int j = 0; j < 2; j++) if (c[adj[i][j]]) { if (adj[i][j] < n) co[i][adj[i][j]] = 1; if (adj[i][j] >= n) for (int k = 0; k < n; k++) co[i][k] |= co[adj[i][j]-n][k]; } } for (int i = 0; i < m; i++) { fill(d, d+m, 0); d[i] = 1; for (int j = 0; j < m; j++) { d[j] = 1; for (int k = 0; k < 2; k++) if (c[adj[j][k]]) { if ((adj[j][k] >= n && !d[adj[j][k]-n]) || (adj[j][k] < n && !co[i][adj[j][k]])) d[j] = 0; } if (d[j] && c[j+n] == 1) c[i+n] = 1; } if (c[i+n] == 1) a[i] = '1'; } cout << a; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...