이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
/*input
*/
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
#define REP(i,j,k) for(int i = j ; i < k ; ++i)
#define RREP(i,j,k) for(int i = j ; i >=k ; --i)
#define A first
#define B second
#define mp make_pair
#define pb emplace_back
#define PII pair<int , int>
#define MEM(i,j) memset(i , j , sizeof i)
#define ALL(i) i.begin() , i.end()
#define DBGG(i,j) cout << i << " " << j << endl
#define DB4(i,j,k,l) cout << i << " " << j << " " << k << " " << l << endl
#define IOS cin.tie(0) , cout.sync_with_stdio(0)
// #define endl "\n"
///------------------------------------------------------------
#define MAX 1500
#define INF 0x3f3f3f3f
struct djs{
int x[MAX] , siz[MAX];
map<int , int> cc[MAX];
void init(){ REP(i , 0 , MAX) x[i] = i , siz[i] = 1; }
int Find(int a){ return a == x[a] ? a : x[a] = Find(x[a]); }
void Union(int a , int b){
a = Find(a) , b = Find(b);
if(a == b) return ;
// cc[a].insert(cc[b].begin() , cc[b].end());
for(auto to : cc[b]) cc[a][to.A] += to.B;
x[b] = a , siz[a] += siz[b];
}
int operator[](int a){ return Find(a); }
} ds;
int n;
void initialize(int _n){
n = _n;
ds.init();
}
int hasEdge(int a, int b){
a = ds[a];
b = ds[b];
int cnt = 0;
ds.cc[a][b] ++;
ds.cc[b][a] ++;
for(auto to : ds.cc[a]) if(ds[to.A] == b) cnt += to.B;
if(cnt == ds.siz[a] * ds.siz[b]) return ds.Union(a , b) , 1;
return 0;
}
// int main(){
// initialize(4);
// int a , b;
// while(cin >> a >> b){
// cout << hasEdge(a , b) << endl;
// }
// 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... |