제출 #1355659

#제출 시각아이디문제언어결과실행 시간메모리
1355659vahagngMeetings (JOI19_meetings)C++20
7 / 100
44 ms3660 KiB
#include "meetings.h"
#include <bits/stdc++.h>
using namespace std;

bool checked[2002][2002];

int ans[303][303][303];

int n, cnt;

void answer(int x, int y){
  if(x > y) swap(x, y);
  Bridge(x, y);
}

void qry(int x, int y, int z){
  int r = Query(x, y, z);
  bool fl = 0;
  if(r != x){
    for(int k = 0; k < n; k++){
      if(k == x || k == y || k == z || k == r) continue;
      int r1;
      if(ans[x][k][r]) r1 = ans[x][k][r];
      else r1 = Query(x, k, r);
      ans[x][k][r] = r1;
      ans[x][r][k] = r1;
      ans[k][x][r] = r1;
      ans[k][r][x] = r1;
      ans[r][k][x] = r1;
      ans[r][x][k] = r1;
      if(r1 == k){
        fl = 1;
        qry(x, r, k);
      }
    }
    if(!fl && !checked[x][r]){
      answer(x, r);
      cnt++;
      checked[x][r] = checked[r][x] = 1;
    }
  }
  if(r != y){
    fl = 0;
    for(int k = 0; k < n; k++){
      if(k == x || k == y || k == z || k == r) continue;
      int r1;
      if(ans[y][k][r]) r1 = ans[y][k][r];
      else r1 = Query(y, k, r);
      ans[y][k][r] = r1;
      ans[y][r][k] = r1;
      ans[k][y][r] = r1;
      ans[k][r][y] = r1;
      ans[r][k][y] = r1;
      ans[r][y][k] = r1;
      if(r1 == k){
        fl = 1;
        qry(y, r, k);
      }
    }
    if(!fl && !checked[y][r]){
      answer(y, r);
      checked[y][r] = checked[r][y] = 1;
      cnt++;
    }
  }
  if(r != z){
    fl = 0;
    for(int k = 0; k < n; k++){
      if(k == x || k == y || k == z || k == r) continue;
      int r1;
      if(ans[z][k][r]) r1 = ans[z][k][r];
      else r1 = Query(z, k, r);
      ans[z][k][r] = r1;
      ans[z][r][k] = r1;
      ans[k][z][r] = r1;
      ans[k][r][z] = r1;
      ans[r][k][z] = r1;
      ans[r][z][k] = r1;
      if(r1 == k){
        fl = 1;
        qry(z, r, k);
      }
    }
    if(!fl && !checked[r][z]){
      answer(z, r);
      cnt++;
      checked[z][r] = checked[r][z] = 1;
    }
  }
}

void Solve(int N) {
  int cnt = 0;
  n = N;
  vector<pair<int,int>> edges;
  for(int i = 0; i < N && cnt != N - 1; i++){
    for(int j = i + 1; j < N && cnt != N - 1; j++){
      for(int z = j + 1; z < N && cnt != N - 1; z++){
        qry(i, j ,z);
      }
    }
  }
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…