제출 #1350847

#제출 시각아이디문제언어결과실행 시간메모리
1350847coderg300711세계 지도 (IOI25_worldmap)C++20
15 / 100
9 ms1920 KiB
#include "bits/stdc++.h"
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pii pair<int,int>
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define pb push_back
#define sz(x) (int)(x).size()
#define rsz resize
#define ass assign
#define F(i,l,r) for(int i=(l);i<(r);++i)
typedef long long ll;
typedef unsigned long long ull;
typedef long double lld;
//template<typename T> using pqg = priority_queue<T, vector<T>, greater<T>>;
#define each(a,x) for(auto a:x)
#define FOR(i,a) for(int i=0;i<(a);i++)
#define ROF(i,a,b) for(int i=(b)-1;i>=(a);i--)
#define eb emplace_back
#define ft front()
#define V vector

#ifndef ONLINE_JUDGE
#define debug(x) cerr << #x <<" "; _print(x); cerr << endl;
#else
#define debug(x)
#endif

void _print(ll t) {cerr << t;}
void _print(int t) {cerr << t;}
void _print(string t) {cerr << t;}
void _print(char t) {cerr << t;}
void _print(lld t) {cerr << t;}
void _print(double t) {cerr << t;}
void _print(ull t) {cerr << t;}

template <class T, class V> void _print(pair <T, V> p);
template <class T> void _print(vector <T> v);
template <class T> void _print(set <T> v);
template <class T, class V> void _print(map <T, V> v);
template <class T> void _print(multiset <T> v);
template <class T, class V> void _print(pair <T, V> p) {cerr << "{"; _print(p.ff); cerr << ","; _print(p.ss); cerr << "}";}
template <class T> void _print(vector <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T> void _print(set <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T> void _print(multiset <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T, class V> void _print(map <T, V> v) {cerr << "[ "; for (auto i : v) {_print(i); cerr << " ";} cerr << "]";}

#include "worldmap.h"

V<V<int>> adj,child,grid;
V<int> boww,bowh;
V<bool> vis;

void calc_size(int u){
vis[u]=1;
boww[u]=bowh[u]=1;
int tot=0,mx=0;
each(v,adj[u]){
  if(!vis[v]){
    child[u].pb(v);
    calc_size(v);
    tot+=boww[v]+1;
    mx=max(mx,bowh[v]);
  }
}
if(!child[u].empty()){
  boww[u]=1+tot;
  bowh[u]=2+mx;
}
}

void draw(int u,int r,int c){
  F(i,r,r+bowh[u]){
    F(j,c,c+boww[u])grid[i][j]=u;
  }
  int chr=r+1,chc=c+1;
  each(v,child[u]){
    draw(v,chr,chc);
    chc+=boww[v]+1;
  }
}

V<V<int>> create_map(int N,int M,V<int> A,V<int> B){
  adj.ass(N+1,V<int>());
  child.ass(N+1,V<int>());
  boww.ass(N+1,0);
  bowh.ass(N+1,0);
  vis.ass(N+1,0);
  FOR(i,M){
    adj[A[i]].pb(B[i]);
    adj[B[i]].pb(A[i]);
  }
  calc_size(1);
  int k=max({boww[1],bowh[1],1});
  grid.ass(k,V<int>(k,1));
  draw(1,0,0);
  return grid;
}
#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...