Submission #1229081

#TimeUsernameProblemLanguageResultExecution timeMemory
1229081trimkusStations (IOI20_stations)C++20
10 / 100
309 ms532 KiB
#include "stations.h"
#include <bits/stdc++.h>
using namespace std;



std::vector<int> label(int n, int k, std::vector<int> U, std::vector<int> V) {
	vector<vector<int>> adj(n);
	for (int i = 0; i < (int)U.size(); ++i) {
		adj[U[i]].push_back(V[i]);
		adj[V[i]].push_back(U[i]);
	}
	vector<int> tin(n), tout(n);
	auto dfs = [&](auto& dfs, int i, int p, int& t) -> void {
		tin[i] = t++;
		for (auto& u : adj[i]) {
			if (p == u) continue;
			dfs(dfs, u, i, t);
		}
		tout[i] = t++;
	};
	int t = 0;
	dfs(dfs, 0, -1, t);
	vector<int> rt(n);
	for (int i = 0; i < n; ++i) {
		// cout << tin[i] << " " << tout[i] << "\n";
		rt[i] = tin[i] * 1000 + tout[i];
	}
	return rt;
}

bool ancestor(int t1, int t2, int tt1, int tt2) {
	return t1 <= tt1 && tt2 <= t2;
}

int find_next_station(int s, int t, std::vector<int> c) {
	int ent1 = t / 1000;
	int ent2 = t % 1000;
	int st1 = s / 1000;
	int st2 = s % 1000;
	// cout << "\n";
	// cout << "s = " << st1 << " " << st2 << "\n";
	// cout << "e = " << ent1 << " " << ent2 << "\n";
	sort(begin(c), end(c), [&](int x, int y) {
		int len = (x % 1000 - x / 1000);
		int len1 = (y % 1000 - y / 1000);
		return len < len1;
	});
	for (auto& i : c) {
		int t1 = i / 1000;
		int t2 = i % 1000;
		// cout << t1 << " " << t2 << "\n";
	}
	for (auto& i : c) {
		int t1 = i / 1000;
		int t2 = i % 1000;
		// cout << t1 << " " << t2 << "\n";
		if (ancestor(t1, t2, ent1, ent2)) {
			return i;
		}
	}
	
	for (auto& i : c) {
		int t1 = i / 1000;
		int t2 = i % 1000;
		// cout << t1 << " " << t2 << "\n";
		if (ancestor(t1, t2, st1, st2)) {
			return i;
		}
	}
	cout << "Not found!!!!\n";
	// assert(false);
	return -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...