Submission #788661

#TimeUsernameProblemLanguageResultExecution timeMemory
788661NeroZein장난감 기차 (IOI17_train)C++17
100 / 100
298 ms1748 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> res(n); vector<vector<int>> g(n), rg(n); for (int i = 0; i < m; ++i) { g[u[i]].push_back(v[i]); rg[v[i]].push_back(u[i]); } while (true) { queue<int> que; for (int i = 0; i < n; ++i) { if (r[i]) { que.push(i); } } vector<bool> vis(n); vector<int> deg(n); for (int i = 0; i < n; ++i) { deg[i] = g[i].size(); } while (!que.empty()) { int vert = que.front(); que.pop(); for (int ch : rg[vert]) { if (a[ch]) { if (!vis[ch]) { vis[ch] = true; if (!r[ch]) { que.push(ch); } } } else { --deg[ch]; if (deg[ch] == 0) { vis[ch] = true; if (!r[ch]) { que.push(ch); } } } } } bool change = false; for (int i = 0; i < n; ++i) { if (r[i] && !vis[i]) { r[i] = 0; change = true; } } if (!change) { for (int i = 0; i < n; ++i) { res[i] = vis[i]; } break; } } 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...