제출 #581388

#제출 시각아이디문제언어결과실행 시간메모리
581388Josia게임 (IOI14_game)C++14
42 / 100
1090 ms12620 KiB
#include <bits/stdc++.h> #include "game.h" using namespace std; int N; vector<set<int>> graph; void initialize(int n) { graph.clear(); N = n; graph.resize(n); for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { if (i == j) continue; graph[i].insert(j); } } } vector<bool> visited; void dfs(int v) { if (visited[v]) return; visited[v] = 1; for (int i: graph[v]) { dfs(i); } } bool isConnected() { visited.assign(N, 0); dfs(0); for (int i=0; i<N; i++) { if (!visited[i]) return 0; } return 1; } int hasEdge(int u, int v) { graph[u].erase(v); graph[v].erase(u); if (!isConnected()) { graph[u].insert(v); graph[v].insert(u); return 1; } return 0; } void test(int n) { vector<pair<int, int>> edges; for (int i = 0; i<n; i++) { for (int j = i+1; j<n; j++) { edges.push_back({i, j}); } } std::random_device rd; std::mt19937 g(rd()); shuffle(edges.begin(), edges.end(), g); initialize(n); vector<int> answers; for (auto i: edges) { if (rand()%2==0) swap(i.first, i.second); cerr << i.first << " " << i.second << "\n"; answers.push_back(hasEdge(i.first, i.second)); } assert(answers.back() == 1); assert((int)accumulate(answers.begin(), answers.end(), 0) == (int)n-1); } // signed main() { // while (true) { // test(4); // cerr << "\n"; // } // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...