QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#731862 | #4363. Branch Assignment | pangitwise | TL | 202ms | 5752kb | C++20 | 2.8kb | 2024-11-10 11:59:48 | 2024-11-10 11:59:50 |
Judging History
answer
#include <iostream>
#include <vector>
#include <climits>
#include <queue>
#include <algorithm>
const long long INF = 10000000000000000LL; // 10^16
std::vector<long long> min_value;
std::vector<int> loc;
std::vector<long long> dist;
void dnc(const std::vector<long long>& dp, std::vector<long long>& tmp, int start, int end, int l, int r) {
int mid = (start + end) / 2;
int next;
for (int i = l; i < mid; i++) {
long long v = dp[i] + (dist[mid] - dist[i]) * (mid - i - 1);
if (v < tmp[mid]) {
tmp[mid] = v;
next = i;
}
}
if (start < mid) dnc(dp, tmp, start, mid - 1, l, next);
if (mid < end) dnc(dp, tmp, mid + 1, end, next, r);
}
void dijstra(int start, const std::vector<std::vector<std::pair<int, int>>>& graph) {
min_value[start] = 0;
std::priority_queue<std::pair<long long, int>, std::vector<std::pair<long long, int>>, std::greater<>> pq;
pq.emplace(0, start);
while (!pq.empty()) {
auto [curr_dist, v] = pq.top();
pq.pop();
if (curr_dist > min_value[v]) continue;
for (const auto& [neighbor, weight] : graph[v]) {
if (curr_dist + weight < min_value[neighbor]) {
min_value[neighbor] = curr_dist + weight;
pq.emplace(min_value[neighbor], neighbor);
}
}
}
}
int main() {
int t = 0;
int n, b, s, r;
std::cin >> n >> b >> s >> r;
std::vector<std::vector<std::pair<int, int>>> graph(n + 1);
std::vector<std::vector<std::pair<int, int>>> reverse_graph(n + 1);
for (int i = 0; i < r; i++) {
int u, v, l;
std::cin >> u >> v >> l;
graph[u].emplace_back(v, l);
reverse_graph[v].emplace_back(u, l);
}
dist.resize(b);
min_value.assign(n + 1, INF);
loc.assign(n + 1, -1);
dijstra(b + 1, graph);
for (int i = 1; i <= b; i++) {
dist[i - 1] += min_value[i];
}
min_value.assign(n + 1, INF);
loc.assign(n + 1, -1);
dijstra(b + 1, reverse_graph);
for (int i = 1; i <= b; i++) {
dist[i - 1] += min_value[i];
}
std::sort(dist.begin(), dist.end());
for (int i = 1; i < b; i++) {
dist[i] += dist[i - 1];
}
std::vector<long long> dp1(b);
for (int i = 0; i < b; i++) {
dp1[i] = i * dist[i];
}
std::vector<long long> dp2(b, INF);
for (int i = 1; i < s; i++) {
if (i & 1) {
dnc(dp1, dp2, i, b - 1, i - 1, b - 1);
std::fill(dp1.begin(), dp1.end(), INF);
} else {
dnc(dp2, dp1, i, b - 1, i - 1, b - 1);
std::fill(dp2.begin(), dp2.end(), INF);
}
}
std::cout << ((s & 1) ? dp1[b - 1] : dp2[b - 1]) << std::endl;
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3620kb
input:
5 4 2 10 5 2 1 2 5 1 3 5 5 4 5 0 1 5 1 2 3 1 3 2 5 2 4 5 2 1 1 3 4 2
output:
13
result:
ok single line: '13'
Test #2:
score: 0
Accepted
time: 0ms
memory: 3616kb
input:
5 4 2 10 5 2 1 2 5 1 3 5 5 4 5 10 1 5 1 2 3 1 3 2 5 2 4 5 2 1 1 3 4 2
output:
24
result:
ok single line: '24'
Test #3:
score: 0
Accepted
time: 0ms
memory: 3616kb
input:
5 4 3 8 1 5 15 5 1 15 2 5 2 5 2 3 3 5 1 5 3 1 4 5 2 5 4 0
output:
4
result:
ok single line: '4'
Test #4:
score: 0
Accepted
time: 0ms
memory: 3504kb
input:
2 1 1 2 1 2 5 2 1 3
output:
0
result:
ok single line: '0'
Test #5:
score: 0
Accepted
time: 0ms
memory: 3784kb
input:
9 4 2 11 1 2 1 2 3 2 3 4 3 4 6 4 6 8 5 8 9 6 9 7 7 7 5 8 5 8 8 7 6 9 6 1 10
output:
304
result:
ok single line: '304'
Test #6:
score: 0
Accepted
time: 10ms
memory: 4564kb
input:
5000 4999 2 9998 1 2 10000 2 1 10000 2 3 10000 3 2 10000 3 4 10000 4 3 10000 4 5 10000 5 4 10000 5 6 10000 6 5 10000 6 7 10000 7 6 10000 7 8 10000 8 7 10000 8 9 10000 9 8 10000 9 10 10000 10 9 10000 10 11 10000 11 10 10000 11 12 10000 12 11 10000 12 13 10000 13 12 10000 13 14 10000 14 13 10000 14 15...
output:
589335814500000
result:
ok single line: '589335814500000'
Test #7:
score: 0
Accepted
time: 62ms
memory: 4368kb
input:
5000 4999 100 9998 1 2 1 2 3 1 3 4 1 4 5 1 5 6 1 6 7 1 7 8 1 8 9 1 9 10 1 10 11 1 11 12 1 12 13 1 13 14 1 14 15 1 15 16 1 16 17 1 17 18 1 18 19 1 19 20 1 20 21 1 21 22 1 22 23 1 23 24 1 24 25 1 25 26 1 26 27 1 27 28 1 28 29 1 29 30 1 30 31 1 31 32 1 32 33 1 33 34 1 34 35 1 35 36 1 36 37 1 37 38 1 38...
output:
1224510000
result:
ok single line: '1224510000'
Test #8:
score: 0
Accepted
time: 169ms
memory: 5752kb
input:
5000 4900 2000 50000 3116 1995 5417 1801 380 719 4749 13 4103 1175 493 659 596 3035 2098 628 2199 2816 711 3295 5220 4888 4316 153 1007 2136 1990 1365 1579 8062 4076 1263 7023 3114 3756 2785 3695 3175 3364 2302 3474 5739 3062 3705 9620 3815 1026 7712 3991 3582 3049 3245 2397 5834 18 1456 1619 2186 4...
output:
166040058
result:
ok single line: '166040058'
Test #9:
score: 0
Accepted
time: 33ms
memory: 5504kb
input:
5000 4950 2 50000 3669 4840 0 614 3306 0 290 1311 0 2359 2891 0 3497 3550 0 3428 2623 0 1940 3386 0 3650 1263 0 2260 4950 0 1588 3186 0 4498 1773 0 4295 296 0 2956 1009 0 176 3322 0 4509 2130 0 894 4934 0 281 1204 0 1731 14 0 2405 1590 0 1315 635 0 1469 195 0 3651 647 0 82 4604 0 1171 195 0 4275 401...
output:
0
result:
ok single line: '0'
Test #10:
score: 0
Accepted
time: 202ms
memory: 5460kb
input:
5000 4900 4850 50000 2664 4071 4296 612 1817 6511 2292 3113 8392 961 4255 1637 4959 1976 2034 1664 4624 1380 912 3972 8714 1207 2958 2443 3503 729 2610 4920 3996 8547 63 1698 7911 948 4574 1568 1045 4886 5174 3103 4846 1519 875 3369 6492 632 2688 563 1632 3563 588 3929 1553 6982 4707 1623 1425 2762 ...
output:
1182041
result:
ok single line: '1182041'
Test #11:
score: 0
Accepted
time: 32ms
memory: 5524kb
input:
5000 4950 2 50000 1218 2222 2897 2887 2737 8305 229 2321 4170 4168 3818 9202 1790 221 4606 2545 1061 7338 1169 592 2259 4092 4087 2360 3322 1047 6485 2970 328 6695 494 4516 2381 3342 4606 4670 3612 3942 9868 834 1386 6434 1142 1782 9753 1709 1989 9597 1149 20 7387 4936 4604 4163 3505 1877 594 4564 2...
output:
254153797367
result:
ok single line: '254153797367'
Test #12:
score: 0
Accepted
time: 70ms
memory: 5688kb
input:
5000 4999 70 50000 1060 1927 0 305 2800 4 2718 2374 9 3134 2200 2 962 1174 7 3953 4904 10 534 4874 10 812 4718 10 4015 728 0 1142 1263 2 864 4957 2 2368 2520 0 814 843 0 1628 3903 8 2067 1860 6 3054 449 6 1611 993 1 4114 4522 3 4264 1745 2 2946 3536 6 901 1625 3 1861 3452 10 1953 179 1 1112 271 3 13...
output:
2767588
result:
ok single line: '2767588'
Test #13:
score: -100
Time Limit Exceeded
input:
5000 4950 4900 50000 1683 1801 0 3511 3698 0 2360 4358 0 75 2274 0 1670 2492 0 3576 4624 0 1833 34 0 3759 4205 0 2081 242 0 3120 235 0 3924 4140 0 3067 3547 0 3793 644 0 4333 1287 0 2083 4043 0 2643 3799 0 4311 4466 0 4919 1 0 1458 3787 0 1870 345 0 3481 1274 0 3095 1988 0 742 4480 0 4047 3163 0 164...