제출 #1343829

#제출 시각아이디문제언어결과실행 시간메모리
1343829hyyhIsland Hopping (JOI24_island)C++20
30 / 100
4 ms432 KiB
#include "island.h"
#include <vector>
#include <set>
#include <iostream>

using namespace std;

void solve(int N, int L) {
  vector<vector<bool>> adj(N+1,vector<bool>(N+1));
  vector<bool> complete(N+1);
  vector<int> ask(N+1);
  int cnt = 0;
  auto connect = [&](int a,int b){
    if(!adj[a][b]){
      cnt++;
      adj[a][b] = 1;
      adj[b][a] = 1;
    }
  };
  auto process = [&](int n){
    if(complete[n] || cnt == N-1) return;
    int i = 1;
    vector<int> far(N+1);
    while(true){
      if(i == N || cnt == N-1){
        complete[n] = 1;
        break;
      }
      int ret = query(n,i++);
      if(far[ret]){
        complete[n] = 1;
        break;
      }
      connect(ret,n);
      for(int j{1};j <= N;j++){
        if(j != n && adj[ret][j]) far[j] = 1;
      }
      int back = query(ret,ask[ret]+1);
      if(back < n) far[back] = 1,ask[ret]++,connect(back,ret);
      else complete[ret] = 1;
    }
  };
  for(int i{N};i >= 1;i--) process(i);
  for(int i{1};i <= N;i++){
    for(int j{1};j <= N;j++){
      if(i < j && adj[i][j]) answer(i,j);
    }
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...