Submission #1025838

#TimeUsernameProblemLanguageResultExecution timeMemory
1025838AmirAli_H1Toy Train (IOI17_train)C++17
0 / 100
8 ms19292 KiB
// In the name of Allah #include <bits/stdc++.h> #include "train.h" using namespace std; typedef long long int ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef complex<ld> cld; #define all(x) (x).begin(),(x).end() #define len(x) ((ll) (x).size()) #define F first #define S second #define X real() #define Y imag() #define pb push_back #define sep ' ' #define endl '\n' #define Mp make_pair #define kill(x) cout << x << '\n', exit(0) #define set_dec(x) cout << fixed << setprecision(x); #define file_io(x,y) freopen(x, "r", stdin); freopen(y, "w", stdout); mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int maxn = 2e5 + 7; int n, m; vector<int> adj[maxn], adjr[maxn]; pii A[maxn]; bool M[maxn]; vector<int> res; int mark[maxn], col[maxn], c = 0; int val[maxn], valx[maxn], valr[maxn]; vector<int> ls[maxn], vc; void dfs(int v) { mark[v] = 1; for (int u : adj[v]) { if (!mark[u]) dfs(u); } vc.pb(v); } void dfsr(int v) { mark[v] = 1; col[v] = c; ls[c].pb(v); for (int u : adjr[v]) { if (!mark[u]) dfsr(u); } } void scc() { for (int i = 0; i < n; i++) { if (!mark[i]) dfs(i); } reverse(all(vc)); fill(mark, mark + n, 0); for (int i : vc) { if (!mark[i]) { dfsr(i); c++; } } for (int i = 0; i < c; i++) { if (len(ls[i]) > 1 || M[ls[i][0]]) valx[i] = 1; } for (int i = c - 1; i >= 0; i--) { for (int v : ls[i]) { for (int u : adj[v]) { if (valx[col[u]]) valx[i] = 1; } } } for (int i = 0; i < n; i++) { int j = col[i]; if (A[i].S == 1) valr[j] = 1; } for (int i = 0; i < c; i++) { val[i] = (valr[i] && valx[i]); } for (int i = c - 1; i >= 0; i--) { for (int v : ls[i]) { for (int u : adj[v]) { if (val[col[u]]) val[i] = 1; } } } } vector<int> who_wins(vector<int> a, vector<int> r, vector<int> ux, vector<int> vx) { n = len(a); m = len(ux); for (int i = 0; i < n; i++) A[i] = Mp(a[i], r[i]); for (int i = 0; i < m; i++) { int u = ux[i], v = vx[i]; adj[u].pb(v); adjr[v].pb(u); if (u == v) M[u] = 1; } res.resize(n); scc(); for (int i = 0; i < n; i++) { int j = col[i]; res[i] = val[j]; } return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...