#include "closing.h"
#include "bits/stdc++.h"
using namespace std;
using i32 = int;
#define int long long
#define len(x) (int)(x.size())
#define all(x) x.begin(), x.end()
#define inf 1000'000'000'000'000'000LL
#define bit(x, i) (((x) >> i) & 1)
template<typename T>
using vec = vector<T>;
i32 max_score(i32 N, i32 X, i32 Y, int K, std::vector<i32> U, std::vector<i32> V, std::vector<i32> W) {
i32 ans = 0;
vec<vec<pair<int, int>>> g(N);
for (int i = 0; i < len(U); i++) {
g[U[i]].emplace_back(V[i], W[i]);
g[V[i]].emplace_back(U[i], W[i]);
}
auto dijkstra = [&](int start) {
priority_queue<pair<int, int>, vec<pair<int, int>>, greater<>> pq;
pq.emplace(0, start);
vec<int> dists(N, inf);
dists[start] = 0;
while (!pq.empty()) {
auto [cost, v] = pq.top();
pq.pop();
if (cost != dists[v]) continue;
for (auto [u, w]: g[v]) {
if (dists[u] > dists[v] + w) {
dists[u] = dists[v] + w;
pq.emplace(dists[u], u);
}
}
}
return dists;
};
auto dX = dijkstra(X);
auto dY = dijkstra(Y);
vec<int> rg(dX);
for (auto h: dY) rg.push_back(h);
sort(all(rg));
int best = 0;
int tK = K;
for (int x: rg) {
if (tK < x) break;
tK -= x;
best++;
}
{
int curK = K;
int cnt = 0;
vec<int> to_add;
for (int i = X; i <= Y; i++) {
curK -= min(dX[i], dY[i]);
cnt++;
to_add.push_back(max(dX[i], dY[i]) - min(dX[i], dY[i]));
}
for (int i = 0; i < X; i++) {
to_add.push_back(min(dX[i], dY[i]));
}
for (int i = Y + 1; i < N; i++) {
to_add.push_back(min(dX[i], dY[i]));
}
if (curK >= 0) {
sort(all(to_add));
for (int x: to_add) {
if (curK < x) break;
curK -= x;
cnt++;
}
best = max(best, cnt);
}
}
{
int curK = K;
int cnt = 0;
vec<int> to_add1;
for (int i = X; i <= Y; i++) {
curK -= min(dX[i], dY[i]);
cnt++;
if (dX[i] > dY[i]) {
to_add1.push_back(max(dX[i], dY[i]) - min(dX[i], dY[i]));
} else {
curK -= max(dX[i], dY[i]) - min(dX[i], dY[i]);
cnt++;
}
}
for (int i = Y + 1; i < N; i++) {
to_add1.push_back(min(dX[i], dY[i]));
}
for (int i = X - 1; i >= 0; i--) {
int tcnt = cnt;
int tcurK = curK;
if (curK < 0) break;
auto to_add = to_add1;
for (int j = i - 1; j >= 0; j--) {
to_add.push_back(dX[j]);
}
sort(all(to_add));
for (int x: to_add) {
if (tcurK < x) break;
tcurK -= x;
tcnt++;
}
best = max(best, tcnt);
cnt += 2;
curK -= dY[i];
}
if (curK >= 0) {
auto to_add = to_add1;
sort(all(to_add));
for (int x: to_add) {
if (curK < x) break;
curK -= x;
cnt++;
}
best = max(best, cnt);
}
}
{
int curK = K;
int cnt = 0;
vec<int> to_add1;
for (int i = X; i <= Y; i++) {
curK -= min(dX[i], dY[i]);
cnt++;
if (dX[i] < dY[i]) {
to_add1.push_back(max(dX[i], dY[i]) - min(dX[i], dY[i]));
} else {
curK -= max(dX[i], dY[i]) - min(dX[i], dY[i]);
cnt++;
}
}
for (int i = 0; i < X; i++) {
to_add1.push_back(min(dX[i], dY[i]));
}
for (int i = Y + 1; i < N; i++) {
int tcnt = cnt;
int tcurK = curK;
if (curK < 0) break;
auto to_add = to_add1;
for (int j = i + 1; j < N; j++) {
to_add.push_back(dY[j]);
}
sort(all(to_add));
for (int x: to_add) {
if (tcurK < x) break;
tcurK -= x;
tcnt++;
}
best = max(best, tcnt);
cnt += 2;
curK -= dX[i];
}
if (curK >= 0) {
auto to_add = to_add1;
sort(all(to_add));
for (int x: to_add) {
if (curK < x) break;
curK -= x;
cnt++;
}
best = max(best, cnt);
}
}
{
int curK = K;
int cnt = 0;
for (int i = X; i <= Y; i++) {
curK -= max(dX[i], dY[i]);
cnt += 2;
}
set<int> used;
vec<pair<int, int>> tgr;
for (int i = 0; i < X; i++) {
tgr.emplace_back(min(dX[i], dY[i]), i);
}
for (int i = Y + 1; i < N; i++) {
tgr.emplace_back(min(dX[i], dY[i]), i);
}
sort(all(tgr));
for (auto [t, id]: tgr) {
vec<int> to_add;
for (int i = 0; i < N; i++) {
if (i >= X and i <= Y) continue;
if (used.count(i)) continue;
to_add.push_back(min(dX[i], dY[i]));
}
if (curK >= 0) {
int tcnt = cnt;
sort(all(to_add));
for (int x: to_add) {
if (curK < x) break;
curK -= x;
tcnt++;
}
best = max(best, tcnt);
}
used.insert(id);
curK -= max(dX[id], dY[id]);
cnt += 2;
}
if (curK >= 0) {
best = max(best, cnt);
}
}
return best;
}
Compilation message
closing.cpp: In function 'i32 max_score(i32, i32, i32, long long int, std::vector<int>, std::vector<int>, std::vector<int>)':
closing.cpp:17:9: warning: unused variable 'ans' [-Wunused-variable]
17 | i32 ans = 0;
| ^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1068 ms |
36068 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Incorrect |
0 ms |
348 KB |
1st lines differ - on the 1st token, expected: '30', found: '27' |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Incorrect |
0 ms |
348 KB |
1st lines differ - on the 1st token, expected: '30', found: '27' |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Incorrect |
0 ms |
348 KB |
1st lines differ - on the 1st token, expected: '30', found: '27' |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Incorrect |
0 ms |
348 KB |
1st lines differ - on the 1st token, expected: '30', found: '27' |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Incorrect |
0 ms |
348 KB |
1st lines differ - on the 1st token, expected: '30', found: '27' |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Incorrect |
0 ms |
348 KB |
1st lines differ - on the 1st token, expected: '30', found: '27' |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Incorrect |
0 ms |
348 KB |
1st lines differ - on the 1st token, expected: '30', found: '27' |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Incorrect |
0 ms |
348 KB |
1st lines differ - on the 1st token, expected: '30', found: '27' |
4 |
Halted |
0 ms |
0 KB |
- |