제출 #855606

#제출 시각아이디문제언어결과실행 시간메모리
855606_uros9게임 (IOI14_game)C++17
100 / 100
411 ms34128 KiB
#include "game.h"
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;

const long long longlongmax=9223372036854775807;
const int modul=998244353;
const long long mod = 1e9 + 7;

vector<int> par(2000),rnk(2000);
vector<vector<int>> povezanost(2000,vector<int>(2000));
int n;
void initialize(int nn){
    n=nn;
    for(int i=0; i<n; i++){
        par[i]=i;
        rnk[i]=0;
    }
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++)
            povezanost[i][j]=1;
    }
}
int ulp(int node){
    if(par[node]==node)
        return node;
    return par[node]=ulp(par[node]);
}
void spajaj(int a,int b){
    a=ulp(a);b=ulp(b);
    if(a==b) return;
    if(rnk[b]>rnk[a])
        swap(a,b);
    par[b]=a;
    if(rnk[b]==rnk[a])
        rnk[a]++;
}
int hasEdge(int u,int v){
    if(ulp(u)==ulp(v)) return 0;
    u=ulp(u);v=ulp(v);
    if(rnk[v]>rnk[u])
        swap(v,u);
    if(povezanost[u][v]!=1&&povezanost[v][u]!=1){
        povezanost[u][v]--;
        povezanost[v][u]--;
        return 0;
    }
    for(int i=0; i<n; i++){
        //if(i==v||ulp(i)==ulp(u)) continue;
        povezanost[u][i]+=povezanost[v][i];
        povezanost[i][u]=povezanost[u][i];
    }
    spajaj(u,v);
    return 1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...