Submission #424218

#TimeUsernameProblemLanguageResultExecution timeMemory
424218cfalasToy Train (IOI17_train)C++14
0 / 100
1156 ms23312 KiB
#include "train.h" #include<bits/stdc++.h> using namespace std; #define mp make_pair #define INF 10000000 #define MOD 1000000007 #define MID ((l+r)/2) #define HASHMOD 2305843009213693951 #define ll long long #define ull unsigned long long #define F first #define S second typedef pair<ll, ll> ii; typedef pair<ii, int> iii; typedef vector<int> vi; typedef vector<ii> vii; typedef map<int, int> mii; #define EPS 1e-6 #define FOR(i,n) for(int i=0;i<((int)(n));i++) #define FORi(i,a,b) for(int i=((int)(a));i<((int)(b));i++) #define FOA(v, a) for(auto &v : a) #define len(x) ((int)x.size()) vector<vi> adj; vector<vi> rev; vi vis; vector<int> path; vector<vi> loops; set<int> spath; vi r; void dfs(int s){ path.push_back(s); spath.insert(s); vis[s] = 1; for(auto v : adj[s]){ if(!vis[v]) dfs(v); else if(spath.count(v)){ bool start = false; vi ap; bool win = false; FOA(x,path){ if(v==x) start = true; if(start) ap.push_back(x); if(start && r[x]) win = true; } if(win) loops.push_back(ap); } } spath.erase(s); path.erase(path.end()-1); } vi who_wins(vi a, vi rr, vi u, vi v) { r = rr; int n = len(a); adj.assign(n, vi()); rev.assign(n, vi()); vis.assign(n,0); vi res(n, 0); FOR(i, len(u)){ adj[u[i]].push_back(v[i]); rev[v[i]].push_back(u[i]); } FOR(i,n){ dfs(i); assert(path.size()==0); } FOA(loop, loops){ queue<int> q; vi used(n, 0); FOA(v,loop) q.push(v), used[v] = true; while(!q.empty()){ int t = q.front(); q.pop(); res[t] = 1; FOA(v,rev[t]){ if(!used[v]){ used[v] = true; q.push(v); } } } } 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...