# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
746175 | mnbvcxz123 | 게임 (IOI14_game) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
int n;
int g[1505][1505];
struct DSU{
int p[1505];
void init(){memset(p,-1,sizeof(p));}
int find(int x){
if(p[x]<0)return x;
return p[x]=find(p[x]);
}
void unite(int a, int b){
a=find(a);
b=find(b);
if(a==b)return;
p[a]+=p[b];
p[b]=a;
}
int get(int x){return -p[find(x)];}
}dsu;
void initialize(int N){
n=N;
dsu.init();
}
int has_Edge(int a, int b){
a=dsu.find(a);
b=dsu.find(b);
++g[a][b],++g[b][a];
if(g[a][b]==dsu.get(a)*dsu.get(b)){
dsu.unite(a,b);
for(int i=0;i<n;++i){
g[a][i]+=g[b][i];
g[i][a]+=g[i][b];
}
return 1;
}
return 0;
}