제출 #950699

#제출 시각아이디문제언어결과실행 시간메모리
950699kilkuwu게임 (IOI14_game)C++17
0 / 100
1 ms2648 KiB
#ifdef LOCAL #ifndef _GAME_H #define _GAME_H void initialize(int n); int hasEdge(int u, int v); #include <cstdio> #include <cassert> #include "game.h" int read_int() { int x; assert(scanf("%d", &x) == 1); return x; } int main() { int n, u, v; n = read_int(); initialize(n); for (int i = 0; i < n * (n - 1) / 2; i++) { u = read_int(); v = read_int(); printf("%d\n", hasEdge(u, v)); } return 0; } #endif #else #include "game.h" #endif #include <bits/stdc++.h> struct DSU { std::vector<int> e; int cnt = 0; DSU(int n) : e(n, -1) {} int find(int u) { return e[u] < 0 ? u : e[u] = find(e[u]); } bool merge(int u, int v) { u = find(u), v = find(v); if (u == v) return false; cnt++; if (e[u] > e[v]) std::swap(u, v); e[u] += e[v]; e[v] = u; return true; } bool same(int u, int v) { return find(u) == find(v); } int size(int u) { return -e[find(u)]; } int size() { return e.size() - cnt; } }; const int mxN = 1500; int s[mxN][mxN]; int n; std::vector<int> r[mxN]; int f[mxN]; void initialize(int _n) { n = _n; for (int i = 0; i < n; i++) { r[i].push_back(i); f[i] = i; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { s[i][j] = 1; } } } int hasEdge(int u, int v) { // let's delete this s[f[u]][f[v]]--; if (s[f[u]][f[v]] >= 1) { return 0; } // we move em // move from one to another int a = f[u], b = f[v]; for (int i : r[b]) { r[a].push_back(i); f[i] = a; } for (int i = 0; i < n; i++) { s[a][i] += s[b][i]; } return 1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...