제출 #39643

#제출 시각아이디문제언어결과실행 시간메모리
39643funcsrGame (IOI14_game)C++14
42 / 100
1000 ms13008 KiB
#include "game.h"
#include <vector>
#include <iostream>
#include <set>
#include <queue>
#include <algorithm>
#include <cassert>
using namespace std;
typedef pair<int, int> P;
#define rep(i, n) for (int i=0; i<(n); i++)
int U[1500];
int find(int x) {
  if (U[x] == x) return x;
  return U[x] = find(U[x]);
}
void unite(int x, int y) {
  x = find(x), y = find(y);
  if (x == y) return;
  U[x] = y;
}

int N;
bool G[1500][1500];
void initialize(int n) {
  N = n;
  rep(i, N) U[i] = i;
}

int hasEdge(int u, int v) {
  int a = find(u), b = find(v);
  if (a == b) {
    assert(false);
    //G[u][v] = G[v][u] = true;
    //return 1;
  }
  int unused = 0;
  G[u][v] = G[v][u] = true;
  rep(i, N) rep(j, N) if (i != j && find(i) == a && find(j) == b) unused += G[i][j]==0;
  if (unused == 0) {
    unite(u, v);
    return 1;
  }
  else return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...