제출 #1321358

#제출 시각아이디문제언어결과실행 시간메모리
1321358ttamx세계 지도 (IOI25_worldmap)C++20
86 / 100
60 ms5468 KiB
#include "worldmap.h"
#include<bits/stdc++.h>

using namespace std;

vector<vector<int>> create_map(int n,int m,vector<int> a,vector<int> b){
  vector<vector<int>> ans(3*n,vector<int>(3*n));
  vector<vector<int>> adj(n+1);
  for(int i=0;i<m;i++){
    adj[a[i]].emplace_back(b[i]);
    adj[b[i]].emplace_back(a[i]);
  }
  vector<int> disc(n+1),sz(n+1);
  int timer=0;
  function<int(int,int,int)> dfs=[&](int u,int d,int st){
    sz[u]=1;
    disc[u]=++timer;
    int cur=st;
    if(u!=1)cur++;
    for(auto v:adj[u])if(!disc[v]){
      cur=dfs(v,d+1,cur)+1;
      sz[u]+=sz[v];
    }
    cur=max(cur,st+2*sz[u]-1);
    for(int i=0;i<3;i++){
      for(int j=st;j<cur;j++){
        ans[d*3+i][j]=u;
      }
    }
    int pos=st+1;
    for(auto v:adj[u])if(disc[v]>disc[u]){
      assert(pos<cur);
      ans[d*3+1][pos]=v;
      pos+=2;
    }
    return cur;
  };
  dfs(1,0,0);
  for(int i=1;i<3*n;i++){
    for(int j=0;j<3*n;j++){
      if(!ans[i][j]){
        ans[i][j]=ans[i-1][j];
      }
    }
  }
  for(int i=0;i<3*n;i++){
    for(int j=1;j<3*n;j++){
      if(!ans[i][j]){
        ans[i][j]=ans[i][j-1];
      }
    }
  }
  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...