제출 #1354580

#제출 시각아이디문제언어결과실행 시간메모리
1354580coderg300711세계 지도 (IOI25_worldmap)C++20
0 / 100
2 ms580 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],adj2[45],tour;
bool vis[45];
bool used[100][100];

void dfs(int u){
	vis[u]=1;
	tour.pb(u);
	each(v,adj2[u]){
        dfs(v);
        tour.pb(u);
	}
}

V<V<int>> create_map(int N,int M,V<int> A,V<int> B){
	F(i,1,N+1){
		adj[i].clear();
		adj2[i].clear();
		vis[i]=0;
	}
	tour.clear();
	FOR(i,100){
		FOR(j,100)used[i][j]=0;
	}
	FOR(i,M){
		adj[A[i]].pb(B[i]);
		adj[B[i]].pb(A[i]);
	}
	V<int> q={1};
	vis[1]=1;
	int head=0;
	while(head<sz(q)){
		int u=q[head++];
		each(v,adj[u]){
			if(!vis[v]){
				vis[v]=1;
				adj2[u].pb(v);
                q.pb(v);
			}
		}
	}
	F(i,1,N+1)vis[i]=0;
	dfs(1);
	int k=sz(tour);
	V<V<int>> grid(k,V<int>(k));
	FOR(i,k){
		FOR(j,k)grid[i][j]=tour[max(i,j)];
	}
	F(u,1,N+1){
		each(v,adj[u]){
			if(u>=v)continue;
			bool found=0;
			for(int i=0;i<k && !found;++i){
				for(int j=i+2;j<k && !found;++j){
					if(grid[i][j]==v && !used[i][j]){
						grid[i][j]=u;
						used[i][j]=1;
						//mark neighbors
						if(i)used[i-1][j]=1;
						if(i<k-1)used[i+1][j]=1;
						if(j)used[i][j-1]=1;
						if(j<k-1)used[i][j+1]=1;
						found=1;
					}
				}
			}
		}
	}
	return grid;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…