답안 #401448

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
401448 2021-05-10T09:32:52 Z Azimjon 꿈 (IOI13_dreaming) C++17
14 / 100
71 ms 14024 KB
#include <bits/stdc++.h>
#include "dreaming.h"

using namespace std;

typedef long long ll;

const int UNVISITED = -1;
const int N = 111111;

int finish;
int d[N];
vector<pair<int, int>> g[N];

vector<int> cc, path;

void dfs(int x, int y) {
	cc.push_back(x);
	for (auto [a, b] : g[x]) {
		if (a == y) continue;
		d[a] = d[x] + b;

		dfs(a, x);
	}
}

void dff(int x, int y) {
	if (!path.empty() && path.back() == finish) return;

	path.push_back(x);
	// cout << x << endl;

	if (path.back() == finish) return;

	for (auto [a, b] : g[x]) {
		if (a == y) continue;

		dff(a, x);

		if (path.back() == finish) return;
	}

	path.pop_back();
}

int travelTime(int n, int m, int l, int a[], int b[], int t[]) {
	memset(d, UNVISITED, sizeof(d));

	for (int i = 0; i < m; i++) {
		g[a[i]].push_back({b[i], t[i]});
		g[b[i]].push_back({a[i], t[i]});
	}

	vector<int> r, di;

	for (int i = 0; i < n; i++) {
		if (d[i] == UNVISITED) {
			cc.clear();
			d[i] = 0;
			dfs(i, N);

			int nu = i;
			for (int x : cc) {
				if (d[x] > d[nu]) nu = x;
			}

			cc.clear();
			d[nu] = 0;
			dfs(nu, N);

			int ku = nu;
			for (int x : cc) {
				if (d[x] > d[ku]) ku = x;
			}

			path.clear();
			finish = ku;
			dff(nu, N);

			int diam = d[ku];

			int centre = 0;
			for (int j = 0; j < (int)path.size(); j++) {
				if (abs(2 * d[path[j]] - diam)
					<= abs(2 * d[path[centre]] - diam)) {
					centre = j;
				}
			}

			centre = path[centre];

			int radius = max(d[centre], diam - d[centre]);
			r.push_back(radius);
			di.push_back(diam);
			/*
						cerr << nu << " " << ku << " " << diam << endl;
						cerr << centre << " " << radius << endl;
						cerr << "=================\n";
						for (int i : path)
							cerr << i << " ";

						cerr << "\n=================\n";
						*/
		}
	}

	sort(r.rbegin(), r.rend());
	/*
		for (int i : r) {
			cerr << i << " ";
		}
	*/
	if (m == 0 && n > 1) return 2 * l;
	// if (m == 0 && n == 1) return 0;

	if (r.size() == 1) return di[0];

	return max(*max_element(di.begin(), di.end()), r[0] + r[1] + l);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 61 ms 14020 KB Output is correct
2 Correct 71 ms 14024 KB Output is correct
3 Correct 37 ms 10252 KB Output is correct
4 Correct 10 ms 4888 KB Output is correct
5 Correct 8 ms 4172 KB Output is correct
6 Correct 15 ms 5708 KB Output is correct
7 Correct 3 ms 3276 KB Output is correct
8 Correct 27 ms 6860 KB Output is correct
9 Correct 41 ms 8476 KB Output is correct
10 Correct 4 ms 3404 KB Output is correct
11 Correct 52 ms 9804 KB Output is correct
12 Correct 65 ms 12120 KB Output is correct
13 Correct 3 ms 3404 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 3276 KB Output is correct
2 Correct 2 ms 3276 KB Output is correct
3 Correct 3 ms 3276 KB Output is correct
4 Correct 3 ms 3276 KB Output is correct
5 Correct 3 ms 3276 KB Output is correct
6 Correct 2 ms 3276 KB Output is correct
7 Correct 3 ms 3276 KB Output is correct
8 Correct 2 ms 3276 KB Output is correct
9 Correct 2 ms 3276 KB Output is correct
10 Correct 3 ms 3276 KB Output is correct
11 Correct 2 ms 3276 KB Output is correct
12 Correct 2 ms 3276 KB Output is correct
13 Correct 2 ms 3276 KB Output is correct
14 Correct 3 ms 3276 KB Output is correct
15 Incorrect 2 ms 3276 KB Output isn't correct
16 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 61 ms 14020 KB Output is correct
2 Correct 71 ms 14024 KB Output is correct
3 Correct 37 ms 10252 KB Output is correct
4 Correct 10 ms 4888 KB Output is correct
5 Correct 8 ms 4172 KB Output is correct
6 Correct 15 ms 5708 KB Output is correct
7 Correct 3 ms 3276 KB Output is correct
8 Correct 27 ms 6860 KB Output is correct
9 Correct 41 ms 8476 KB Output is correct
10 Correct 4 ms 3404 KB Output is correct
11 Correct 52 ms 9804 KB Output is correct
12 Correct 65 ms 12120 KB Output is correct
13 Correct 3 ms 3404 KB Output is correct
14 Correct 3 ms 3276 KB Output is correct
15 Correct 2 ms 3276 KB Output is correct
16 Correct 3 ms 3276 KB Output is correct
17 Correct 3 ms 3276 KB Output is correct
18 Correct 3 ms 3276 KB Output is correct
19 Correct 2 ms 3276 KB Output is correct
20 Correct 3 ms 3276 KB Output is correct
21 Correct 2 ms 3276 KB Output is correct
22 Correct 2 ms 3276 KB Output is correct
23 Correct 3 ms 3276 KB Output is correct
24 Correct 2 ms 3276 KB Output is correct
25 Correct 2 ms 3276 KB Output is correct
26 Correct 2 ms 3276 KB Output is correct
27 Correct 3 ms 3276 KB Output is correct
28 Incorrect 2 ms 3276 KB Output isn't correct
29 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 24 ms 6336 KB Output is correct
2 Incorrect 27 ms 6412 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 3276 KB Output is correct
2 Correct 2 ms 3276 KB Output is correct
3 Correct 3 ms 3276 KB Output is correct
4 Correct 3 ms 3276 KB Output is correct
5 Correct 3 ms 3276 KB Output is correct
6 Correct 2 ms 3276 KB Output is correct
7 Correct 3 ms 3276 KB Output is correct
8 Correct 2 ms 3276 KB Output is correct
9 Correct 2 ms 3276 KB Output is correct
10 Correct 3 ms 3276 KB Output is correct
11 Correct 2 ms 3276 KB Output is correct
12 Correct 2 ms 3276 KB Output is correct
13 Correct 2 ms 3276 KB Output is correct
14 Correct 3 ms 3276 KB Output is correct
15 Incorrect 2 ms 3276 KB Output isn't correct
16 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 61 ms 14020 KB Output is correct
2 Correct 71 ms 14024 KB Output is correct
3 Correct 37 ms 10252 KB Output is correct
4 Correct 10 ms 4888 KB Output is correct
5 Correct 8 ms 4172 KB Output is correct
6 Correct 15 ms 5708 KB Output is correct
7 Correct 3 ms 3276 KB Output is correct
8 Correct 27 ms 6860 KB Output is correct
9 Correct 41 ms 8476 KB Output is correct
10 Correct 4 ms 3404 KB Output is correct
11 Correct 52 ms 9804 KB Output is correct
12 Correct 65 ms 12120 KB Output is correct
13 Correct 3 ms 3404 KB Output is correct
14 Correct 3 ms 3276 KB Output is correct
15 Correct 2 ms 3276 KB Output is correct
16 Correct 3 ms 3276 KB Output is correct
17 Correct 3 ms 3276 KB Output is correct
18 Correct 3 ms 3276 KB Output is correct
19 Correct 2 ms 3276 KB Output is correct
20 Correct 3 ms 3276 KB Output is correct
21 Correct 2 ms 3276 KB Output is correct
22 Correct 2 ms 3276 KB Output is correct
23 Correct 3 ms 3276 KB Output is correct
24 Correct 2 ms 3276 KB Output is correct
25 Correct 2 ms 3276 KB Output is correct
26 Correct 2 ms 3276 KB Output is correct
27 Correct 3 ms 3276 KB Output is correct
28 Incorrect 2 ms 3276 KB Output isn't correct
29 Halted 0 ms 0 KB -