Submission #584706

#TimeUsernameProblemLanguageResultExecution timeMemory
5847061ne장난감 기차 (IOI17_train)C++14
0 / 100
390 ms1608 KiB
#include "train.h" #include<bits/stdc++.h> using namespace std; std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v) { int n = (int)a.size(); int m = (int)u.size(); vector<int>ans(n,0); vector<vector<int>>adj(n); for (int i = 0;i<m;++i){ adj[u[i]].push_back(v[i]); } vector<int>visited(n,0); vector<int>cnt(n,0); vector<int>parent(n,-1); function<int(int)>dfs = [&](int u){ if (visited[u] == 2)return (cnt[u] | ans[u]); visited[u] = 1; int ans = 0; for (auto x:adj[u]){ if (visited[x] == 1){ int y = u; vector<int>temp; int got = r[x]; temp.push_back(x); while(y!=x){ got|=r[y]; temp.push_back(y); y = parent[y]; } ans |= got; for (auto y:temp)cnt[y]|=got; } else{ parent[x] = u; ans|=dfs(x); } } visited[u] = 2; return cnt[u] |= ans; }; for (int i = 0;i<n;++i){ if (visited[i] == 2){ ans[i] = cnt[i]; } else{ ans[i] = dfs(i); } } for (int j = 0;j<n;++j){ for (int i = 0;i<m;++i){ cnt[u[i]]|=cnt[v[i]]; } } for (int i = 0;i<n;++i){ ans[i]|=cnt[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...