제출 #129627

#제출 시각아이디문제언어결과실행 시간메모리
129627SortingGame (IOI14_game)C++14
42 / 100
1073 ms1432 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1507; int n; int par[N], sz[N]; bool e[N][N]; void find_par(int u){ if(u == par[u]){ return; } find_par(par[u]); par[u] = par[par[u]]; } bool unite(int u, int v){ find_par(u); find_par(v); if(par[u] == par[v]){ return false; } if(sz[par[u]] < sz[par[v]]){ swap(u, v); } sz[par[u]] += sz[par[v]]; par[par[v]] = par[u]; return true; } void initialize(int _n){ n = _n; for(int i = 0; i < n; i++){ par[i] = i; sz[i] = 1; } } bool eq(int a, int b, int c, int d){ if(a == c && b == d){ return true; } if(a == d && b == c){ return true; } return false; } int hasEdge(int u, int v){ for(int i = 0; i < n; i++){ find_par(i); } int cnt = 0; if(par[u] == par[v]){ while(true); } for(int i = 0; i < n; i++){ for(int j = i + 1; j < n; j++){ if(eq(par[i], par[j], par[u], par[v]) && !e[i][j]){ cnt++; } } } e[u][v] = true; e[v][u] = true; if(cnt == 1){ unite(u, v); return 1; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...