Submission #142639

#TimeUsernameProblemLanguageResultExecution timeMemory
142639meatrowSleepy game (innopolis2018_final_D)C++17
100 / 100
99 ms12780 KiB
//#pragma GCC optimize("O3") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,tune=native") //#pragma GCC optimize ("unroll-loops") #include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; const int N = 1e5 + 5; int dist[N][2]; int way[N][2]; vector<int> g[N]; int used[N]; int cycle; void dfs(int v) { used[v] = 1; for (int u : g[v]) { if (used[u] == 1) { cycle = 1; } if (!used[u]) { dfs(u); } } used[v] = 2; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int n, m; cin >> n >> m; for (int i = 1; i <= n; i++) { int k; cin >> k; while (k--) { int v; cin >> v; g[i].push_back(v); } } int st; cin >> st; dfs(st); dist[st][0] = 1; queue<pair<int, int>> q; q.push({ st, 0 }); while (!q.empty()) { auto p = q.front(); q.pop(); for (int u : g[p.first]) { if (!dist[u][p.second ^ 1]) { way[u][p.second ^ 1] = p.first; dist[u][p.second ^ 1] = 1; q.push({ u, p.second ^ 1 }); } } } int kek = 0; for (int i = 1; i <= n; i++) { if (g[i].empty() && dist[i][1]) { kek = i; } } if (kek) { cout << "Win\n"; vector<int> path; int t = 1; for (; kek; kek = way[kek][t], t ^= 1) { path.push_back(kek); } reverse(path.begin(), path.end()); for (int v : path) { cout << v << ' '; } return 0; } if (cycle) { cout << "Draw"; } else { cout << "Lose"; } return 0; }
#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...