Submission #1048111

#TimeUsernameProblemLanguageResultExecution timeMemory
1048111TrentToy Train (IOI17_train)C++17
0 / 100
6 ms2136 KiB
#include "train.h" #include "bits/stdc++.h" using namespace std; #define forR(i, x) for(int i = 0; i < (x); ++i) #define REP(i, a, b) for(int i = (a); i < (b); ++i) #define all(x) x.begin(), x.end() typedef long long ll; typedef vector<int> vi; typedef vector<vi> vvi; typedef vector<ll> vll; typedef vector<vll> vvll; typedef vector<bool> vb; void dfs(int c, vb& vis, vvi& adj) { assert(!vis[c]); vis[c] = true; for(int i : adj[c]) if(!vis[i]) { dfs(i, vis, adj); } } const int MN = 5010; int dfn[MN], mi[MN], gi[MN], gsiz[MN]; vector<int> stk; vvi gp; bool vis[MN]; int cdfn; void tarjan(int c, vvi& adj) { assert(!vis[c]); vis[c] = true; dfn[c] = mi[c] = cdfn++; stk.push_back(c); for(int i : adj[c]) { if(!vis[i]) { tarjan(i, adj); mi[c] = min(mi[c], mi[i]); } else { mi[c] = min(mi[c], dfn[i]); } } if(dfn[c] == mi[c]) { int cur; gp.push_back({}); do{ cur = stk.back(); gi[cur] = gp.size() - 1; ++gsiz[(int) gp.size() - 1]; stk.pop_back(); gp.back().push_back(cur); } while(cur != c); } } 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(); vvi adj(n); vvi rAdj(n); forR(i, m) { adj[u[i]].push_back(v[i]); rAdj[v[i]].push_back(u[i]); } cdfn = 0; forR(i, n) { if(!vis[i]) { tarjan(i, adj); } } vb vis(n, false); forR(i, n) { if(r[i] && !vis[i] && gsiz[gi[i]] > 1) { dfs(i, vis, rAdj); } } vector<int> ret(n); forR(i, n) ret[i] = vis[i] ? 1 : 0; return ret; }
#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...