Submission #1130390

#TimeUsernameProblemLanguageResultExecution timeMemory
1130390Ak_16게임 (IOI14_game)C++17
15 / 100
1 ms360 KiB
#include <iostream>
using namespace std;


int par[2000];
int siz[2000];

int cnt[1600][1600];

int fin(int x){
  if(par[x]==x){return x;}
  else {return fin(par[x]);}
}

void unite(int x, int y){
  int xr = fin(x);
  int yr = fin(y);
  if(siz[xr]<siz[yr]){swap(xr, yr);}
  par[yr] = xr;
  siz[xr] += siz[yr];
}

void initialize(int n){
  for(int i=1; i<=n; i++){
    par[i] = i; siz[i] = 1;
  }
  for(int i=1; i<=n; i++){
    for(int j=1; j<=n; j++){
      cnt[i][j] = 0;
    }
  }
}

int hasEdge(int u, int v){
  u++; v++;
  int n1 = fin(u);
  int n2 = fin(v);
  int n3 = siz[n1];
  int n4 = siz[n2];
  
  if(cnt[n1][n2] == n3 * n4 - 1){
    unite(n1, n2);
    cnt[n1][n2]++;
    cnt[n2][n1]++;
    return 1;
  }
  else {
    cnt[n1][n2]++;
    cnt[n2][n1]++;
    return 0;
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...