이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "game.h"
// __builtin_popcount(x)
// __builtin_popcountll(x)
#define here cerr<<"===========================================\n"
#include <bits/stdc++.h>
#define ld double
#define ll long long
#define ull unsigned long long
#define llinf 100000000000000000LL // 10^17
#define iinf 2000000000 // 2*10^9
#define pb push_back
#define popb pop_back
#define fi first
#define sc second
#define endl '\n'
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pld pair<ld,ld>
#define sz(a) int(a.size())
#define all(a) a.begin(),a.end()
#define ceri(a,l,r) {for(ll i_ = l;i_<=r;i_++) cerr<<a[i_]<< " ";cerr<<endl;}
using namespace std;
#define maxn 1505
int n;
ll dsu[maxn];
ll dsu2[maxn];
ll siz[maxn];
ll siz2[maxn];
ll root(ll x,ll *dsu){
while(x!=dsu[x]) x = dsu[x] = dsu[dsu[x]];
return x;
}
void upd(ll x,ll y,ll *dsu,ll *siz){
x = root(x,dsu);
y = root(y,dsu);
if(x==y) return;
dsu[x] = y;
siz[y]+=siz[x];
}
void initialize(int N) {
n = N;
iota(dsu+1,dsu+n+1,1);
iota(dsu2+1,dsu2+n+1,1);
fill(siz,siz+n+1,1);
fill(siz2,siz2+n+1,1);
}
int hasEdge(int u, int v) {
u++;
v++;
ll ru = root(u,dsu);
ll rv = root(v,dsu);
if(ru==rv) return 0;
if(siz[ru]+siz[rv]==n) return 0;
upd(u,v,dsu,siz);
return 1;
}
/*
4
0 1
3 0
1 2
0 2
3 1
2 3
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |