Submission #341639

# Submission time Handle Problem Language Result Execution time Memory
341639 2020-12-30T10:42:25 Z Drew_ Stations (IOI20_stations) C++14
Compilation error
0 ms 0 KB
#include "dreaming.h"
#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define ii pair<int, int>
#define f1 first
#define s2 second

int const inf = 1e9 + 7;

vector<vector<ii>> adj;
vector<ii> dst; //furthest and second furthest distance from vertex
vector<bool> vst;
vector<int> vertices;

inline ii combine(ii x, int y)
{
	int a = max(max(x.f1, x.s2), y);
	int b = x.f1 + x.s2 + y - a - min(min(x.f1, x.s2), y);

	return {a, b};
}

void dfs(int node)
{
	vst[node] = true;
	vertices.pb(node);
	for (ii to : adj[node])
	{
		if (!vst[to.f1])
		{
			dfs(to.f1);
			dst[node] = combine(dst[node], to.s2 + dst[to.f1].f1);
		}
	}
}

void reroot(int node)
{
	vst[node] = true;
	for (ii to : adj[node])
	{
		if (!vst[to.f1])
		{
			if (dst[node].f1 == to.s2 + dst[to.f1].f1)
				dst[to.f1] = combine(dst[to.f1], to.s2 + dst[node].s2);
			else dst[to.f1] = combine(dst[to.f1], to.s2 + dst[node].f1);

			reroot(to.f1);
		}
	}
}

int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
	adj.resize(N);
	dst.assign(N, {0, 0});
	vst.assign(N, false);

	for (int i = 0; i < M; ++i)
		adj[A[i]].pb({B[i], T[i]}), adj[B[i]].pb({A[i], T[i]});

	vector<int> candidate; //vertice connecting with other tree
	for (int i = 0; i < N; ++i)
	{
		if (!vst[i])
		{
			vertices.clear();
			dfs(i);

			for (int x : vertices)
				vst[x] = false;
			reroot(i);

			int best = vertices[0];
			for (int x : vertices)
			{
				if (dst[best].f1 > dst[x].f1)
					best = x;
			}
			candidate.pb(best);
		}
	}

	int best = candidate[0];
	for (int x : candidate)
	{
		//cerr << x << ": " << dst[x].f1 << '\n';
		if (dst[best].f1 < dst[x].f1)
			best = x;
	}

	for (int x : candidate)
	{
		if (best != x)
			adj[best].pb({x, L}), adj[x].pb({best, L});
	}

	dst.assign(N, {0, 0});
	vst.assign(N, false);
	dfs(0);

	vst.assign(N, false);
	reroot(0);

	int res = 0;
	for (int i = 0; i < N; ++i)
		res = max(res, dst[i].f1);

	return res;
}

Compilation message

stations.cpp:1:10: fatal error: dreaming.h: No such file or directory
    1 | #include "dreaming.h"
      |          ^~~~~~~~~~~~
compilation terminated.