제출 #774062

#제출 시각아이디문제언어결과실행 시간메모리
774062danikoynov게임 (IOI14_game)C++14
0 / 100
1 ms348 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; const int maxn = 1510; int n; int used[maxn]; unordered_set < int > st, mst; void initialize(int N) { n = N; for (int i = 0; i < n; i ++) for (int j = 0; j < n; j ++) { if (i != j) { if (i + 1 == j) mst.insert(i * n + j); else st.insert(i * n + j); } } } vector < int > adj[maxn]; void dfs(int v, int cnt) { used[v] = cnt; for (int u : adj[v]) { if (!used[u]) dfs(u, cnt); } } int hasEdge(int u, int v) { if (u > v) swap(u, v); int hs = u * n + v; if (mst.find(hs) == mst.end()) { st.erase(hs); return 0; } for (int i = 0; i < n; i ++) adj[i].clear(), used[i] = 0; for (int edge : mst) { if (edge == hs) continue; adj[edge / n].push_back(edge % n); adj[edge % n].push_back(edge / n); } dfs(0, 1); for (int i = 0; i < n; i ++) if (used[i] == 0) { dfs(i, 2); break; } for (int edge : st) { if (edge == hs) continue; if (used[edge / n] != used[edge % n]) { st.erase(hs); mst.insert(edge); st.erase(edge); return 0; } } return 1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...