Submission #966018

# Submission time Handle Problem Language Result Execution time Memory
966018 2024-04-19T09:35:47 Z 42kangaroo Closing Time (IOI23_closing) C++17
43 / 100
128 ms 44208 KB
#include "closing.h"
#include "bits/stdc++.h"

#include <vector>

#define ll long long
using namespace std;

struct Ed {
	ll to, w;
};

bool operator<(const Ed &l, const Ed &r) {
	return l.w > r.w;
}

using g_t = vector<vector<Ed>>;

void diDfs(int n, ll d, g_t &g, vector<ll> &di) {
	if (di[n] != -1) return;
	di[n] = d;
	for (auto e: g[n]) {
		diDfs(e.to, d + e.w, g, di);
	}
}

void maG(int n, int p, bool com, g_t &g, g_t &nG, vector<bool>& ma, array<vector<ll>, 2> &di, vector<int>& inD) {
	if (!ma[n]) {
		if (di[com][p] == 0) {
			nG.back().push_back({n, di[com][n]});
			inD[n]++;
		} else if (di[com][n] < di[!com][n]){
			nG[p].push_back({n, di[com][n]});
			inD[n]++;
		} else {
			nG[n].push_back({n + (int)g.size(), di[com][n] - di[!com][n]});
			nG[p + g.size()].push_back({n + (int)g.size(), di[com][n] - di[!com][n]});
			inD[n + g.size()] += 2;
		}
	} else if (ma[n] && di[com][n] > di[!com][n]) {
		if (di[com][p] < di[!com][p]) {
			nG.back().push_back({n + (int)g.size(),  di[com][n] - di[!com][n]});
			inD[n + g.size()]++;
		} else {
			nG[p + g.size()].push_back({n + (int)g.size(),  di[com][n] - di[!com][n]});
			inD[n + g.size()]++;
		}
	}
	for (auto e: g[n]) {
		if (e.to == p) continue;
		maG(e.to, n, com, g, nG, ma, di, inD);
	}
}

bool markdfs(int n, int p, int y, g_t &g, vector<bool> &ma) {
	if (n == y) return ma[n] = true;
	for (auto e: g[n]) {
		if (e.to == p) continue;
		if (markdfs(e.to, n, y, g, ma)) return ma[n] = true;
	}
	return false;
}

int max_score(int N, int X, int Y, long long K,
              std::vector<int> U, std::vector<int> V, std::vector<int> W) {
	g_t g(N);
	for (int i = 0; i < N - 1; ++i) {
		g[U[i]].push_back({V[i], W[i]});
		g[V[i]].push_back({U[i], W[i]});
	}
	array<vector<ll>, 2> dist;
	dist.fill(vector<ll>(N, -1));
	diDfs(X, 0, g, dist[0]);
	diDfs(Y, 0, g, dist[1]);
	int nuWithout = 0;
	vector<bool> vis(N, false);
	priority_queue<pair<Ed, bool>> q;
	q.push({{X, 0}, false});
	q.push({{Y, 0}, true});
	ll kC = K;
	while (!q.empty()) {
		auto [ed, com] = q.top();
		q.pop();
		if (vis[ed.to]) continue;
		if (kC < ed.w) break;
		kC -= ed.w;
		nuWithout++;
		vis[ed.to] = true;
		for (auto e: g[ed.to]) {
			q.push({{e.to, dist[com][e.to]}, com});
		}
	}
	vector<bool> ma(N, false);
	markdfs(X, X, Y, g, ma);
	int nuW = 0;
	g_t nG(2 * N + 1);
	for (int i = 0; i < N; ++i) {
		if (ma[i]) {
			K -= min(dist[0][i], dist[1][i]);
			nuW++;
		}
	}
	if (K < 0) return nuWithout;
	vector<int> inD(2*N);
	maG(X, X, false, g, nG, ma, dist, inD);
	maG(Y, Y, true, g, nG, ma, dist, inD);
	q.push({{2*N, 0}, false});
	while (!q.empty()) {
		auto [ed, com] = q.top();
		q.pop();
		if (K < ed.w) break;
		K -= ed.w;
		if (com) nuW++;
		for (auto e: nG[ed.to]) {
			if (--inD[e.to] == 0) {
				q.push({e, true});
			}
		}
	}
	return max(nuW, nuWithout);
}

int max_score2(int N, int X, int Y, long long K,
              std::vector<int> U, std::vector<int> V, std::vector<int> W) {
	using namespace std;
	if (X > Y) swap(X, Y);
	vector<ll> distX(N), distY(N);
	distX[X] = 0;
	for (int i = X + 1; i < N; ++i) {
		distX[i] = distX[i - 1] + W[i - 1];
	}
	for (int i = X - 1; i >= 0; --i) {
		distX[i] = distX[i + 1] + W[i];
	}
	distY[Y] = 0;
	for (int i = Y + 1; i < N; ++i) {
		distY[i] = distY[i - 1] + W[i - 1];
	}
	for (int i = Y - 1; i >= 0; --i) {
		distY[i] = distY[i + 1] + W[i];
	}
	int ma = 0;
	for (int i = 0; i <= X; ++i) {
		ll co = 0;
		for (int j = i; j < N; ++j) {
			co += distX[j];
			if (j >= X) {
				int act = j - i + 1;
				if (co > K) continue;
				else {
					ll co2 = K - co;
					int lon = 0;
					int l = 0, r = Y;
					ll cos = 0;
					for (int k = 0; k < Y; ++k) {
						if (i <= k && k <= j && distX[k] > distY[k]);
						else if (i <= k && k <= j) cos += distY[k] - distX[k];
						else cos += distY[k];
					}
					while (l < Y && r < N) {
						while (l < Y && r < N && cos > co2) {
							if (i <= l && l <= j && distX[l] > distY[l]);
							else if (i <= l && l <= j) cos -= distY[l] - distX[l];
							else cos -= distY[l];
							l++;
						}
						while (r < N && cos <= co2) {
							lon = max(lon, r - l + 1);
							r++;
							if (r == N) break;
							if (i <= r && r <= j && distX[r] > distY[r]);
							else if (i <= r && r <= j) cos += distY[r] - distX[r];
							else cos += distY[r];
						}
					}
					act += lon;
					ma = max(ma, act);
				}
			}
		}
	}
	return ma;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 107 ms 38092 KB Output is correct
2 Correct 128 ms 44208 KB Output is correct
3 Correct 62 ms 3032 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 1 ms 348 KB Output is correct
13 Correct 1 ms 348 KB Output is correct
14 Correct 1 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 1 ms 348 KB Output is correct
17 Correct 0 ms 436 KB Output is correct
18 Correct 1 ms 344 KB Output is correct
19 Correct 1 ms 604 KB Output is correct
20 Correct 1 ms 600 KB Output is correct
21 Correct 1 ms 800 KB Output is correct
22 Correct 1 ms 348 KB Output is correct
23 Correct 1 ms 348 KB Output is correct
24 Correct 1 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 1 ms 348 KB Output is correct
13 Correct 1 ms 348 KB Output is correct
14 Correct 1 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 1 ms 348 KB Output is correct
17 Correct 0 ms 436 KB Output is correct
18 Correct 1 ms 344 KB Output is correct
19 Correct 1 ms 604 KB Output is correct
20 Correct 1 ms 600 KB Output is correct
21 Correct 1 ms 800 KB Output is correct
22 Correct 1 ms 348 KB Output is correct
23 Correct 1 ms 348 KB Output is correct
24 Correct 1 ms 348 KB Output is correct
25 Correct 2 ms 444 KB Output is correct
26 Correct 4 ms 1472 KB Output is correct
27 Correct 2 ms 1372 KB Output is correct
28 Correct 2 ms 1372 KB Output is correct
29 Correct 3 ms 1524 KB Output is correct
30 Correct 1 ms 1016 KB Output is correct
31 Correct 2 ms 1112 KB Output is correct
32 Correct 2 ms 1116 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Incorrect 0 ms 344 KB 1st lines differ - on the 1st token, expected: '6', found: '5'
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 1 ms 348 KB Output is correct
14 Correct 1 ms 348 KB Output is correct
15 Correct 1 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 1 ms 348 KB Output is correct
18 Correct 0 ms 436 KB Output is correct
19 Incorrect 0 ms 344 KB 1st lines differ - on the 1st token, expected: '6', found: '5'
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 1 ms 348 KB Output is correct
14 Correct 1 ms 348 KB Output is correct
15 Correct 1 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 1 ms 348 KB Output is correct
18 Correct 0 ms 436 KB Output is correct
19 Correct 1 ms 344 KB Output is correct
20 Correct 1 ms 604 KB Output is correct
21 Correct 1 ms 600 KB Output is correct
22 Correct 1 ms 800 KB Output is correct
23 Correct 1 ms 348 KB Output is correct
24 Correct 1 ms 348 KB Output is correct
25 Correct 1 ms 348 KB Output is correct
26 Incorrect 0 ms 344 KB 1st lines differ - on the 1st token, expected: '6', found: '5'
27 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 1 ms 348 KB Output is correct
14 Correct 1 ms 348 KB Output is correct
15 Correct 1 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 1 ms 348 KB Output is correct
18 Correct 0 ms 436 KB Output is correct
19 Correct 1 ms 344 KB Output is correct
20 Correct 1 ms 604 KB Output is correct
21 Correct 1 ms 600 KB Output is correct
22 Correct 1 ms 800 KB Output is correct
23 Correct 1 ms 348 KB Output is correct
24 Correct 1 ms 348 KB Output is correct
25 Correct 1 ms 348 KB Output is correct
26 Correct 2 ms 444 KB Output is correct
27 Correct 4 ms 1472 KB Output is correct
28 Correct 2 ms 1372 KB Output is correct
29 Correct 2 ms 1372 KB Output is correct
30 Correct 3 ms 1524 KB Output is correct
31 Correct 1 ms 1016 KB Output is correct
32 Correct 2 ms 1112 KB Output is correct
33 Correct 2 ms 1116 KB Output is correct
34 Incorrect 0 ms 344 KB 1st lines differ - on the 1st token, expected: '6', found: '5'
35 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 1 ms 348 KB Output is correct
14 Correct 1 ms 348 KB Output is correct
15 Correct 1 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 1 ms 348 KB Output is correct
18 Correct 0 ms 436 KB Output is correct
19 Correct 1 ms 344 KB Output is correct
20 Correct 1 ms 604 KB Output is correct
21 Correct 1 ms 600 KB Output is correct
22 Correct 1 ms 800 KB Output is correct
23 Correct 1 ms 348 KB Output is correct
24 Correct 1 ms 348 KB Output is correct
25 Correct 1 ms 348 KB Output is correct
26 Correct 2 ms 444 KB Output is correct
27 Correct 4 ms 1472 KB Output is correct
28 Correct 2 ms 1372 KB Output is correct
29 Correct 2 ms 1372 KB Output is correct
30 Correct 3 ms 1524 KB Output is correct
31 Correct 1 ms 1016 KB Output is correct
32 Correct 2 ms 1112 KB Output is correct
33 Correct 2 ms 1116 KB Output is correct
34 Incorrect 0 ms 344 KB 1st lines differ - on the 1st token, expected: '6', found: '5'
35 Halted 0 ms 0 KB -