제출 #1186937

#제출 시각아이디문제언어결과실행 시간메모리
1186937hengliao기지국 (IOI20_stations)C++20
52.32 / 100
310 ms596 KiB
#include "stations.h"
#include<bits/stdc++.h>
using namespace std;

#define F first
#define S second
#define vll vector<ll>
#define pll pair<ll, ll>
#define pb push_back

typedef int ll;

namespace{
	const ll dumb=1000;
	ll timer;
}



void dfs(ll cur, ll par, vll &re, vll &sz, vector<vll> &adj){
	sz[cur]=1;
	re[cur]=timer;
	timer++;
	for(auto &chd:adj[cur]){
		if(chd==par) continue;
		dfs(chd, cur, re, sz, adj);
		sz[cur]+=sz[chd];
	}
}

vector<int> label(int n, int k, vector<int> u, vector<int> v) {
	vector<vll> adj(n);
	vll re(n);
	vll sz(n);

	for(ll i=0;i<n-1;i++){
		adj[u[i]].pb(v[i]);
		adj[v[i]].pb(u[i]);
	}

	timer=0;

	dfs(0, -1, re, sz, adj);

	for(ll i=0;i<n;i++){
		re[i]+=dumb*sz[i];
	}

	return re;
}

int find_next_station(int s, int t, vector<int> c) {
	auto id=[&](ll tar){
		return tar%dumb;
	};
	auto sz=[&](ll tar){
		return tar/dumb;
	};
	ll p=-1;
	for(auto &it:c){
		if(id(it)<id(s)){
			p=it;
			break;
		}
	}
	// assert(p!=-1);
	if(id(t)>=id(s) && id(t)<=id(s)+sz(s)-1){
		for(auto &it:c){
			if(it==p) continue;
			if(id(t)>=id(it) && id(t)<=id(it)+sz(it)-1){
				return it;
			}
		}
		assert(false);
	}
	else{
		assert(p!=-1);
		return p;
	}
}
#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...