이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "game.h"
int cnt[1500][1500];
int link[1500], h[1500], m;
int _find(int x){
if(x == link[x]) return x;
return link[x] = _find(link[x]);
}
bool _unite(int x, int y){
x = _find(x), y = _find(y);
if(x == y) return 1;
if(h[x] + h[y] == m) return 0;
if(cnt[x][y] >= 2){
cnt[x][y]--; cnt[y][x]--;
return 0;
}
link[x] = y; h[y] += h[x];
for(int i=0;i<m;i++){
cnt[y][i] += cnt[x][i]; cnt[i][y] += cnt[i][x];
}
return 1;
}
void initialize(int n) {
m = n;
for(int i=0;i<n;i++){
link[i] = i; h[i] = 1;
for(int j=0;j<n;j++) cnt[i][j] = 1;
}
}
int hasEdge(int u, int v) {
return _unite(u, v);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |