Submission #377631

#TimeUsernameProblemLanguageResultExecution timeMemory
377631SaraIli (COI17_ili)C++14
0 / 100
1 ms364 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/tree_policy.hpp> #include <ext/pb_ds/assoc_container.hpp> using namespace std; using namespace __gnu_pbds; template <class T> using Tree = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>; #define ll long long #define F first #define S second #define pb push_back const int N = 10000 + 10; const int LOG = 25; const int MOD = 1e9 + 7; const ll inf = 1e9 + 5; int n, m; string a; int ans[N]; int tmp[N]; int adj[N][2]; pair <int, int> e[N]; void dfs_set0(int v){ ans[v] = -1; for (int u : adj[v]){ if (!ans[u]){ dfs_set0(u); } } return; } void dfs2_set0(int v){ tmp[v] = -1; for (int u : adj[v]){ if (!tmp[u]){ dfs2_set0(u); } } return; } inline bool ok(int v){ for (int i = 1; i <= n + m; i ++){ tmp[i] = 0; } dfs2_set0(v); for (int i = 1; i <= n; i ++){ if (tmp[i] == 0){ tmp[i] = ans[i]; } } for (int i = 1; i <= m; i ++){ int par = i + n; int u = e[i].F; int v = e[i].S; if ((tmp[u] == 1) || (tmp[v] == 1)){ tmp[par] = 1; } if ((tmp[u] == -1) && (tmp[v] == -1)){ tmp[par] = -1; } if ((tmp[par] == -1) && (a[i] == '1')) return 0; } return 1; } int main() { ios_base::sync_with_stdio(0), cin.tie(0); cout.tie(0); cin >> n >> m >> a; a = ' ' + a; for (int i = 1; i <= m; i ++){ char type; int u, v, par = i + n; cin >> type >> u; if (type == 'c') u += n; cin >> type >> v; if (type == 'c') v += n; adj[par][0] = u; adj[par][1] = v; if (a[i] == '0'){ dfs_set0(par); } e[i] = {u, v}; } for (int i = 1; i <= n + m; i ++){ if (ans[i] == 0){ ans[i] = 1; } } for (int i = 1; i <= m; i ++){ if (ans[i + n] == 1){ ans[i + n] = 1 - ok(i + n); } if (ans[i + n] == 1) cout << 1; if (ans[i + n] == -1) cout << 0; if (ans[i + n] == 0) cout << '?'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...