Submission #1255185

#TimeUsernameProblemLanguageResultExecution timeMemory
1255185yuichiro17World Map (IOI25_worldmap)C++20
100 / 100
24 ms2888 KiB
#include "worldmap.h"
#include <bits/stdc++.h>
using namespace std;

bool visited[40];
vector<int>et;
vector<vector<int>>adj;
void dfs(int x){
  et.push_back(x);
  for(int i:adj[x]){
    if(visited[i])continue;
    visited[i]=true;
    dfs(i);
    et.push_back(x);
  }
}

std::vector<std::vector<int>> create_map(int N, int M, std::vector<int> A, std::vector<int> B) {
  if(N==1)return {{1}};
  vector<vector<int>>ans(2*N,vector<int>(2*N,1));
  for(int i=0;i<N;i++)visited[i]=false;
  et.clear();
  adj.resize(N);
  for(int i=0;i<N;i++)adj[i].clear();
  vector<vector<bool>>adjm(N,vector<bool>(N,false));
  for(int i=0;i<M;i++){
    adj[A[i]-1].push_back(B[i]-1);
    adj[B[i]-1].push_back(A[i]-1);
    adjm[A[i]-1][B[i]-1]=true;
    adjm[B[i]-1][A[i]-1]=true;
  }
  visited[0]=true;
  dfs(0);
  vector<vector<pair<int,int>>>diag(4*N);
  for(int i=0;i<2*N;i++){
    for(int j=0;j<2*N;j++){
      diag[i+j].push_back({i,j});
    }
  }
  for(int i=0;i<N;i++)visited[i]=false;
  for(int i=0;i<2*N-2;i++){
    adjm[et[i]][et[i+1]]=false;
    adjm[et[i+1]][et[i]]=false;
  }
  int i=1;
  vector<array<int,3>>d;
  for(int j=1;j<2*N-1;j++){
    while(!diag[i].empty()){
      ans[diag[i].back().first][diag[i].back().second]=et[j]+1;
      diag[i].pop_back();
    }
    i++;
    if(visited[et[j]])continue;
    visited[et[j]]=true;
    d.push_back({min(i,4*N-1-i),i,et[j]});
    i++;
    while(!diag[i].empty()){
      ans[diag[i].back().first][diag[i].back().second]=et[j]+1;
      diag[i].pop_back();
    }
    i++;
  }
  sort(d.begin(),d.end());
  for(int i=0;i<N;i++){
    for(int j=0;j<i;j++){
      if(adjm[d[i][2]][d[j][2]]){
        ans[diag[d[i][1]].back().first][diag[d[i][1]].back().second]=d[j][2]+1;
        diag[d[i][1]].pop_back();
      }
    }
    while(!diag[d[i][1]].empty()){
      ans[diag[d[i][1]].back().first][diag[d[i][1]].back().second]=d[i][2]+1;
      diag[d[i][1]].pop_back();
    }
  }
  return ans;
}
#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...