제출 #1201547

#제출 시각아이디문제언어결과실행 시간메모리
1201547tkm_algorithmsStations (IOI20_stations)C++20
0 / 100
3065 ms500 KiB
/**
*    In the name of Allah
*    We are nothing and you're everything
**/
#include <bits/stdc++.h>
#include "stations.h"
using namespace std;
using ll = long long;

#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
//#define int long long

const char nl = '\n';

const int N = 1005;
vector<int> g[N];
int s[N];

void dfs(int a, int p) {
	s[a] = 1;
	for (auto i: g[a]) {
		if (i == p)continue;
		dfs(i, a);
		s[a] += s[i];
	}
}

vector<int> label(int n, int k, vector<int> x, vector<int> v) {
	for (int i = 0; i < n; ++i)g[i].clear();
	
	for (int i = 0; i < n-1; ++i) {
		g[x[i]].push_back(v[i]);
		g[v[i]].push_back(x[i]);
	}
	
	dfs(0, 0);
	int root = 0;
	for (int i = 0; i < n; ++i)if (s[i] == 1) {
		root = i;
		break;
	}
	
	int u = root, t = 0, p = root;
	
	vector<int> ans(n);
	ans[root] = t++;
	
	while (true) {
		for (auto i: g[u]) {
			if (i == p)continue;
			p = u; u = i;
			break;
		}
		ans[u] = t++;
		if (s[u] == 1 && u != root)break;
	}
	
	return ans;
}

int find_next_station(int ss, int t, vector<int> c) {
	if (ss == t)return ss;
	if (ss < t)return ss+1;
	else return ss-1;
}
#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...