Submission #168332

#TimeUsernameProblemLanguageResultExecution timeMemory
168332johuthaRail (IOI14_rail)C++14
30 / 100
3051 ms197752 KiB
#include "rail.h"
#include <queue>
#include <vector>
#include <iostream>

using namespace std;

void findLocation(int N, int first, int location[], int stype[])
{
	location[0] = first;
	stype[0] = 1;

	priority_queue<pair<int,pair<int,int>>> pq;

	for (int i = 1; i < N; i++)
	{
		location[i] = -1;
		stype[i] = -1;
		int qdist = -getDistance(0, i);
		pq.emplace(qdist, make_pair(0, i));
	}

	while (!pq.empty())
	{
		auto curr = pq.top();
		pq.pop();

		int dist = -curr.first;
		int oldnr = curr.second.first;
		int newnr = curr.second.second;

		if (location[newnr] != -1) continue;

		int pos = location[oldnr] + dist*(stype[oldnr] == 1 ? 1 : -1);

		location[newnr] = pos;
		stype[newnr] = (stype[oldnr] == 1 ? 2 : 1);

		for (int i = 0; i < N; i++)
		{
			if (location[i] != -1 || i == newnr) continue;
			pq.emplace(-getDistance(newnr, i), make_pair(newnr, i));
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...