제출 #897199

#제출 시각아이디문제언어결과실행 시간메모리
897199d4xn게임 (APIO22_game)C++17
60 / 100
2512 ms29756 KiB
#include <bits/stdc++.h> #include "game.h" using namespace std; const int N = 3e4+4, K = 1e3+3, inf = INT_MAX; bool cycle; int n, k, mn[K]; bitset<N> bt[K]; vector<int> adj[N]; void dfs(int x, int y) { if (bt[x][y]) return; bt[x][y] = 1; mn[x] = min(mn[x], y); for (int& z : adj[y]) { if (bt[x][z]) continue; dfs(x, z); } } void init(int N, int K) { n = N; k = K; cycle = 0; for (int i = 0; i < n; i++) { adj[i].clear(); } for (int i = 0; i < k; i++) { bt[i].reset(); mn[i] = (i < k-1 ? k-1 : inf); } } int add_teleporter(int u, int v) { if (cycle) return 1; if (u < k && u == v) return cycle = 1; adj[u].push_back(v); if (u >= k) { for (int i = 0; i < k; i++) { if (!bt[i][u]) continue; adj[i].push_back(v); dfs(i, v); } } else if (u < k && v < k) { if (u < v) return 0; else return cycle = 1; } else if (u < k) { dfs(u, v); } for (int i = 0; i < k; i++) { if (mn[i] <= i) { cycle = 1; break; } } return cycle; }
#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...