Submission #396874

#TimeUsernameProblemLanguageResultExecution timeMemory
396874peuchRail (IOI14_rail)C++17
30 / 100
2722 ms262148 KiB
#include "rail.h"
#include<bits/stdc++.h>
using namespace std;

const int MAXN = 5010;

int n;
map<pair<int, int>, int> dist;
int marc[MAXN], loc[MAXN], tp[MAXN];
	
void dfs(int cur, int pai);

void findLocation(int N, int first, int location[], int stype[])
{
	dist[make_pair(0, 0)] = 1e6;
	n = N;
	
	loc[0] = first, tp[0] = 1;
	
	dfs(0, 0);
	
	for(int i = 0; i < N; i++) location[i] = loc[i], stype[i] = tp[i];
	return;
}

void dfs(int cur, int pai){
	marc[cur] = 1;
	set<pair<int, int> > aux;
	for(int i = 0; i < n; i++){
		if(marc[i]) continue;
		if(dist[make_pair(cur, i)] == 0) dist[make_pair(cur, i)] = dist[make_pair(i, cur)] = getDistance(cur, i);
		aux.insert(make_pair(dist[make_pair(cur, i)], i));
	}
	while(!aux.empty()){
		int viz = aux.begin()->second;
		aux.erase(aux.begin());
		if(marc[viz]) continue;
		if(dist[make_pair(cur, viz)] > dist[make_pair(pai, viz)]) continue;
		if(tp[cur] == 1) loc[viz] = loc[cur] + dist[make_pair(cur, viz)], tp[viz] = 2;
		else loc[viz] = loc[cur] - dist[make_pair(cur, viz)], tp[viz] = 1;
		dfs(viz, cur);
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...