이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef double db;
ll gcd(ll a , ll b) {return b ? gcd(b , a % b) : a ;} // greatest common divisor (PGCD)
ll lcm(ll a , ll b) {return (a * b) / gcd(a , b);} // least common multiple (PPCM)
#define ss second
#define ff first
#define all(x) (x).begin() , (x).end()
#define pb push_back
#define vi vector<int>
#define vii vector<pair<int,int>>
#define vl vector<ll>
#define vll vector<pair<ll,ll>>
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pdd pair<double,double>
#define vdd vector<pdd>
#define dte tuple<double , double , double>
using namespace std;
const int INF = 1000*1000*1000; // 1 e 9
const int MOD = 1e9 + 7;//998244353 ;
const double EPS = 0.000000001; // 1 e -9
const ll inf = (ll)2e18;
int cur ;
int g[2020][2020];
int nb[2020];
int n;
set<int> s;
int id[2020];
int ran[2020];
int getid(int x){
return id[x] == x ? x : id[x] = getid(id[x]);
}
void uni(int x , int y){
x = getid(x); y = getid(y);
if(ran[x] > ran[y]) swap(x , y);
ran[y] += ran[x];
for(int c = 0 ; c < n ; c++) g[y][c] = g[c][y] = g[c][y] + g[c][x];
for(int i = 0 ; i < n ; i++) g[x][i] = g[i][x] = 0;
id[x] = y;
}
int hasEdge(int u, int v){
u = getid(u); v = getid(v);
if(g[u][v] > 1){
g[u][v]--; g[v][u]--; return 0;
}
assert(g[u][v] == 1);
g[u][v] = g[v][u] = 0;
uni(u , v);
return 1;
}
void initialize(int N){
n = N;
for(int i = 0 ; i < n ; i++) {
for(int j = 0 ; j < n ; j++){
g[i][j] = g[j][i] = 1;
}
}
for(int i = 0 ; i < n ; i++) g[i][i] = 0;
for(int i = 0 ; i < n ; i++) {
id[i] = i; ran[i] = 1;
}
}
/*int main(){
//ifstream fin ("testing.txt");
//ofstream fout ("output.txt");
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int n; cin>>n;
initialize(n);
for(int i = 0 ; i < (n * (n - 1)) / 2 ; i++){
int u , v; cin>>u>>v; cout<< hasEdge(u , v) << endl;
}
return 0;
}
*/
/*
Think of : BS / DFS / BFS / SSSP / SCC / MSP / MAX FLOW / TOPSORT / LCA / MATRIX / DP(bitmask) / 2 POINTERS / SEG TREE / MATH / UN FIND / MO / HLD
Read the statement CAREFULLY !!
Make a GREADY APPROACH !!!! (start from highest / lowest)
Make your own TESTS !!
Be careful from CORNER CASES !
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |