이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
int n;
vector<int> parent;
vector<int> size, cnt;
int ufind(int u) {
if (parent[u] == u) return u;
return parent[u] = ufind(parent[u]);
}
void ujoin(int u, int v) {
u = ufind(u);
v = ufind(v);
parent[v] = u;
size[u] += size[v];
cnt[u] += cnt[v];
}
void initialize(int N) {
n = N;
cnt = vector<int>(n, 0);
size = vector<int>(n, 1);
parent = vector<int>(n);
for (int i = 0; i < n; ++i) parent[i] = i;
}
int hasEdge(int u, int v) {
int a = ufind(u), b = ufind(v);
++cnt[a]; ++cnt[b];
if (a != b) {
if (cnt[a] == size[a]*(n-1) || cnt[b] == size[b]*(n-1)) {
ujoin(a, b);
return 1;
}
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |