Submission #72906

#TimeUsernameProblemLanguageResultExecution timeMemory
72906NavickToy Train (IOI17_train)C++17
11 / 100
16 ms1964 KiB
#include <bits/stdc++.h> #include "train.h" #define F first #define S second #define pii pair<int, int> #define pb push_back using namespace std; typedef long long ll; typedef long double ld; const int maxN = 5e3 + 10; bool t[maxN]; int num[maxN], c[maxN], a[maxN], sz[maxN]; vector <int> adj[maxN], rev[maxN], topol; bool mark[maxN]; void DFS(int v) { mark[v] = true; for (auto u : adj[v]) if(!c[u] && !mark[u]) DFS(u); topol.pb(v); } void SFD(int v, int comp) { mark[v] = true; sz[comp] ++; num[v] = comp; for (auto u : rev[v]) if(!mark[u] && !c[u]) SFD(u, comp); } void sfd(int v) { mark[v] = true; for (auto u : rev[v]) if(!mark[u]) sfd(u); } std::vector<int> who_wins(std::vector<int> A, std::vector<int> r, std::vector<int> u, std::vector<int> v) { int n = A.size(), m = u.size(); for (int i=0; i<n; i++) c[i] = r[i], a[i] = A[i]; for (int i=0; i<m; i++) { adj[u[i]].pb(v[i]); rev[v[i]].pb(u[i]); if(u[i] == v[i]) t[u[i]] = true; } for (int i=0; i<n; i++) if(!c[i] && !mark[i]) DFS(i); reverse(topol.begin(), topol.end()); memset(mark, 0, sizeof mark); int id = 0; for (auto v : topol) if(!mark[v]){ SFD(v, id); id ++; } memset(mark, 0, sizeof mark); for (int i=0; i<n; i++) { if(c[i]) continue ; int id = num[i]; if(sz[id] > 1 || t[i]) sfd(i); } vector <int> ans; for (int i=0; i<n; i++) ans.pb(!mark[i]); return ans; }
#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...