Submission #583938

#TimeUsernameProblemLanguageResultExecution timeMemory
583938PiejanVDCToy Train (IOI17_train)C++17
0 / 100
14 ms1492 KiB
#include <bits/stdc++.h> #include "train.h" using namespace std; const int mxN = (int)5005; vector<int>adj[mxN]; vector<int>radj[mxN]; vector<int>df; vector<int>c(mxN); int C = 0; vector<bool>vis(mxN); vector<bool>rvis(mxN); void dfs(int u) { df.push_back(u); vis[u] = 1; for(auto z : adj[u]) if(!vis[z]) { dfs(z); } } void col(int u) { c[u] = C; rvis[u] = 1; for(auto z : radj[u]) if(!rvis[z]) { col(z); } } vector<int>who_wins(vector<int>a, vector<int>r, vector<int>u, vector<int>v) { int n = r.size(); int m = u.size(); for(int i = 0 ; i < m ; i++) { adj[u[i]].push_back(v[i]); radj[v[i]].push_back(u[i]); } dfs(0); for(auto z : df) { if(c[z]) continue; C++; col(z); } vector<bool>have(n,0); for(int i = 1 ; i <= C ; i++) { for(int node = 0 ; node < n ; node++) { if(c[node] == i && r[node]) have[i] = 1; } } vector<int>ans(n,0); for(int i = 0 ; i < n ; i++) { vector<bool>t(n,0); t[i] = 1; stack<int>s; s.push(i); while(!s.empty()) { int node = s.top(); s.pop(); if(have[c[node]]) { ans[i] = 1; break; } for(auto z : adj[node]) if(!t[z]) { t[z] = 1; s.push(z); } } } 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...