제출 #1357090

#제출 시각아이디문제언어결과실행 시간메모리
1357090coderg300711세계 지도 (IOI25_worldmap)C++20
100 / 100
19 ms2916 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<int> adj[45];
bool vis[45];
set<pii> pending;
V<int> tour;

void dfs(int u,int p){
	vis[u]=1;
	tour.pb(u);
	each(v,adj[u]){
		if(!vis[v]){
			pending.erase({min(u,v),max(u,v)});
			dfs(v,u);
			tour.pb(u);
		}
	}
}

V<V<int>> create_map(int n,int m,V<int> a,V<int> b){
FOR(i,n+1){
	adj[i].clear();
	vis[i]=0;
}
pending.clear();
tour.clear();
FOR(i,m){
	adj[a[i]].pb(b[i]);
	adj[b[i]].pb(a[i]);
	pending.insert({min(a[i],b[i]),max(a[i],b[i])});
}
dfs(1,0);
int k=n<<1;
V<V<int>> grid(k,V<int>(k,0));
V<V<pii>> diags(k<<1);
FOR(i,k){
	FOR(j,k)diags[i+j].pb({i,j});
}
FOR(i,n+1)vis[i]=0;
int cur=0;
V<pii> v;//id,country
each(u,tour){
	each(p,diags[cur])grid[p.fi][p.se]=u;
	cur++;
	if(!vis[u]){
		vis[u]=1;
		v.pb({cur,u});
		cur++;
		each(p,diags[cur])grid[p.fi][p.se]=u;
		cur++;
	}
}
while(cur<(k<<1)){
	each(p,diags[cur])grid[p.fi][p.se]=tour.back();
	cur++;
}
sort(v.begin(),v.end(),[&](const pii &a,const pii &b){
	return sz(diags[a.fi])>sz(diags[b.fi]);
});
each(x,v){
int u=x.se,d=x.fi;
int ptr=0;
each(v,adj[u]){
	pii edge={min(u,v),max(u,v)};
	if(pending.count(edge)){
		if(ptr<sz(diags[d])){
			pii pos=diags[d][ptr++];
			grid[pos.fi][pos.se]=v;
			pending.erase(edge);
		}
	}
}
while(ptr<sz(diags[d])){
	pii pos=diags[d][ptr++];
	grid[pos.fi][pos.se]=u;
}
}
return grid;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…