Submission #1033649

#TimeUsernameProblemLanguageResultExecution timeMemory
1033649vjudge1Toy Train (IOI17_train)C++17
11 / 100
11 ms6576 KiB
#include "train.h" #include<bits/stdc++.h> using namespace std; vector<int>adj[100100],radj[100100]; stack<int>stk; int onstk[100100],id[100100],low[100100],cmp[100100],sz[100100],CC,slf[100100]; void tarjan(int n){ onstk[n]=1; stk.push(n); id[n]=low[n]=++CC; for(auto i:adj[n]){ if(!id[i]) tarjan(i); if(onstk[i]) low[n]=min(low[n],low[i]); } if(low[n]==id[n]){ while(onstk[n]){ int x=stk.top(); stk.pop();cmp[x]=n; onstk[x]=0,sz[n]++; } } } vector<int>ans; void yes(int n){ if(ans[n])return; ans[n]=1; for(auto x:radj[n]) yes(x); } 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(); ans.resize(n,0); for(int i=0;i<m;i++)slf[u[i]]|=v[i]==u[i], adj[u[i]].push_back(v[i]), radj[v[i]].push_back(u[i]); for(int i=0;i<n;i++) if(!id[i])tarjan(i); for(int i=0;i<n;i++) if((sz[cmp[i]]>1||slf[i])&&r[i]) yes(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...