제출 #585561

#제출 시각아이디문제언어결과실행 시간메모리
585561LastRonin게임 (IOI14_game)C++14
100 / 100
388 ms18676 KiB
#include "game.h" #include <bits/stdc++.h> #define ll long long using namespace std; const int N = 1610; int gn; int p[N], sz[N]; bool was[N][N]; int get(int a) { return (p[a] = (p[a] == a ? a : get(p[a]))); } void unt(ll a, ll b) { a = get(a); b = get(b); if(a == b)return; if(sz[a] < sz[b])swap(a, b); p[b] = a; sz[a] += sz[b]; } void initialize(int n) { gn = n; for(int i = 0; i < n; i++) sz[i] = 1, p[i] = i; } int hasEdge(int u, int v) { was[u][v] = 1; was[v][u] = 1; if(get(u) == 0 && get(v) == 0)return 0; if(get(u) != 0 && get(v) != 0)return 0; if(get(u) != 0)swap(u, v); if(get(u) == 0) { for(int i = 0; i < gn; i++) { if(get(i) == 0 && !was[i][v])return 0; } unt(u, v); return 1; } return 1; } /* 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; } */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...