Submission #836149

#TimeUsernameProblemLanguageResultExecution timeMemory
836149Josia장난감 기차 (IOI17_train)C++17
5 / 100
2063 ms1888 KiB
#include "train.h" #include <bits/stdc++.h> using namespace std; vector<vector<int>> graph; vector<bool> own; vector<bool> station; vector<int> dp; vector<bool> vis; vector<int> path; int dfs(int v) { if (vis[v]) { if (dp[v] != -1) return dp[v]; vector<int> cycle; bool contains = 0; for (int i = path.size()-1; i>=0; i--) { cycle.push_back(path[i]); if (station[path[i]]) contains=1; if (path[i] == v) break; } return contains; } vis[v] = 1; path.push_back(v); set<int> poss; for (int i: graph[v]) { poss.insert(dfs(i)); } path.pop_back(); if (own[v]) { if (poss.count(1)) return dp[v]=1; return dp[v]=0; } else { if (poss.count(0)) return dp[v]=0; return dp[v]=1; } } vector<int> who_wins(vector<int> a, vector<int> r, vector<int> u, vector<int> v) { int n = a.size(); graph.assign(n, vector<int>()); for (int i = 0; i<(int)u.size(); i++) { graph[u[i]].push_back(v[i]); } own.resize(n); station.resize(n); for (int i = 0; i<n; i++) { own[i] = a[i]; station[i] = r[i]; } vector<int> res(n); for (int i = 0; i<n; i++) { vis.assign(n, 0); dp.assign(n, -1); path.clear(); res[i] = dfs(i); } 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...