# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|
1190309 | | Tob | Ili (COI17_ili) | C++20 | | 791 ms | 79184 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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |