Submission #1228530

#TimeUsernameProblemLanguageResultExecution timeMemory
1228530noyancanturkIsland Hopping (JOI24_island)C++20
100 / 100
2 ms444 KiB
#include "island.h"

#include<bits/stdc++.h>
using namespace std;

#define pb push_back

using pii=pair<int,int>;

namespace {
  const int lim=500;
  vector<int>v[lim];
  int haveedge[lim][lim];
  vector<int>roots;
  int isroot[lim];
  vector<pii>ans;
  int parent[lim];

  int find(int i){
    if(i==parent[i])return i;
    return parent[i]=find(parent[i]);
  }
  void unite(int i,int j){
    parent[find(i)]=find(j);
  }
}

void solve(int n, int L) {
  for(int i=1;i<=n;i++)parent[i]=i;
  roots.pb(1);
  for(int i=2;i<=n;i++){
    int res=query(i,1);
    if(res<i){
      v[i].pb(res);
      v[res].pb(i);
      haveedge[i][res]=haveedge[res][i]=1;
      ans.pb({res,i});
      unite(i,res);
    }else{
      roots.pb(i);
      isroot[i]=1;
    }
  }
  for(int i=2;i<=n;i++){
    if(isroot[i])continue;
    for(int k=2;k<=n-1;k++){
      int res=query(i,k);
      if(res<i){
        if(find(i)==find(res)){
          break;
        }else{
          unite(i,res);
          ans.pb({res,i});
        }
      }else break;
    }
  }
  for(auto[x,y]:ans){
    answer(x,y);
  }

  /*
  int variable_example = query(1, 1);
  for (int i = 2; i <= N; i++) {
    answer(1, i);
  }
  */
}
#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...