# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
702493 | math_rabbit_1028 | 게임 (IOI14_game) | C++14 | 1 ms | 212 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "game.h"
#include <bits/stdc++.h>
using namespace std;
int root[1515], dep[1515], can[1515], comp, last;
void initialize(int n) {
for (int i = 0; i < n; i++) root[i] = i;
for (int i = 0; i < n; i++) dep[i] = 1;
for (int i = 0; i < n; i++) can[i] = n - 1;
comp = n;
last = n * (n - 1) / 2;
}
int Find(int v) {
if (v == root[v]) return v;
else return root[v] = Find(root[v]);
}
int hasEdge(int u, int v) {
last--;
if (last == 0) return 1;
u = Find(u);
v = Find(v);
//cout << u << " " << v << " " << can[u] << " " << can[v] << "\n";
if (u == v) return 1;
else if (comp <= 2) {
can[u]--;
can[v]--;
return 0;
}
else if (can[u] > 1 && can[v] > 1) {
can[u]--;
can[v]--;
return 0;
}
else {
if (dep[u] > dep[v]) {
root[v] = u;
can[u] = can[u] + can[v] - 2;
}
else if (dep[u] < dep[v]) {
root[u] = v;
can[v] = can[v] + can[u] - 2;
}
else {
root[u] = v;
dep[v] = dep[v]++;
can[v] = can[v] + can[u] - 2;
}
comp--;
return 1;
}
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |