QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#621102 | #7812. 旅游巴士 | tiankonguse | 50 | 749ms | 4860kb | C++20 | 2.4kb | 2024-10-08 08:53:18 | 2024-10-08 08:53:19 |
Judging History
answer
#include <bits/stdc++.h>
/*
题意:给一个图,部分路径有最早时间限制,起点p1时刻是k周期出发(t1=a*k),
终点pn要求也是k周期时刻到达(tn=b*k).
基本思路:搜索(bfs 或 dfs)求最短路,每个节点在 t%k 时间,只能到达一次
分析:
1)不考虑任何限制:经典最短路。
2)考虑起点周期k:如果一个点在 t 时刻可以到达,则可以在 t+b*k
时刻到达,故只需要储存最小的 t。 3)考虑路径 [u,v,a] 开放时间:到达 u 时,时刻
t<a, 则可以加上若干 k,使得可以通过这个路径, 即找到最小的 T=t+bk, 使得 T>=a。
4)考虑终点周期限制:终点必须满足 `t%k==0`,这意味着倒数第二步需满足 `t%k ==
k-1`,倒数第三步需满足 `t%k == k-2`。 故每个点满足`t%k =
[0,k-1]`的时刻都需要计算出来,按结论2,储存下每个时刻的最小 t, k 数据范围 100。
算法:广度优先搜索 或 深度优先搜索
重复节点标记: flag[T][N],含义:到达节点 N 时,时间为 `T`
(0<=T<k)时的最早到达时间。 复杂度:`O(nk)` 答案:flag[n][0]
*/
using namespace std;
typedef long long ll; // 整数别名
const int INF = 1 << 30; // 整数最大值
vector<vector<pair<ll, ll>>> g; // 图储存在 g 里面, 元素值为 {v, a}
vector<vector<ll>> flag; // 标记每个位置 t%k 到达的最优时间
ll n, m, k;
void dfs(ll u, ll tu) {
if (flag[tu % k][u] <= tu) return; // 达到时间没有更优,不处理
flag[tu % k][u] = tu;
for (auto [v, a] : g[u]) {
ll tv = tu;
if (tv < a) { // 道路没开放,在门口等到 b 个 k
ll b = (a - tv + k - 1) / k; // 相差 a-tv 时间,等待 k 周期,需向上取整
tv += b * k;
}
tv++; // 通过这条道路,时间加1
dfs(v, tv);
}
}
void Solver() { //
scanf("%lld%lld%lld", &n, &m, &k);
g.resize(n);
flag.resize(k, vector<ll>(n, INF)); // 默认每个节点每个时刻都是不可到达
while (m--) {
ll u, v, a;
scanf("%lld%lld%lld", &u, &v, &a); // u->v
u--, v--; // 下标转换为从0开始
g[u].push_back({v, a});
}
dfs(0, 0); // 入口,0时刻可以到达
ll ans = flag[0][n - 1];
printf("%lld\n", ans == INF ? -1 : ans);
}
int main() {
Solver();
return 0;
}
/*
5 5 3
1 2 0
2 5 1
1 3 0
3 4 3
4 5 1
*/
詳細信息
Pretests
Final Tests
Test #1:
score: 5
Accepted
time: 1ms
memory: 3784kb
input:
9 14 95 7 9 0 6 9 0 4 2 0 3 4 0 5 7 0 7 9 0 8 7 0 5 3 0 8 7 0 1 6 0 5 3 0 2 8 0 3 1 0 6 5 0
output:
190
result:
ok single line: '190'
Test #2:
score: 5
Accepted
time: 1ms
memory: 3836kb
input:
10 14 51 6 5 0 8 10 0 9 8 0 3 10 0 6 4 0 3 4 0 4 10 0 8 3 0 9 8 0 1 2 0 7 9 0 5 4 0 3 6 0 2 7 0
output:
-1
result:
ok single line: '-1'
Test #3:
score: 5
Accepted
time: 1ms
memory: 3776kb
input:
10 14 55 5 5 82801 3 4 748185 6 10 98839 3 8 797926 5 3 57690 9 7 37956 4 6 926122 10 2 958237 8 1 40578 9 2 62884 2 8 145245 8 5 426166 1 9 880408 7 2 162816
output:
926145
result:
ok single line: '926145'
Test #4:
score: 5
Accepted
time: 0ms
memory: 4136kb
input:
9 15 97 1 1 990149 6 4 393083 4 7 171280 6 7 635660 8 6 123113 1 2 384925 6 7 507533 8 6 416969 3 4 975110 2 5 575466 2 4 72458 7 9 923003 5 3 590414 4 8 733761 7 5 440313
output:
923052
result:
ok single line: '923052'
Test #5:
score: 5
Accepted
time: 0ms
memory: 3844kb
input:
10 14 54 9 2 881274 7 8 356423 3 10 853386 2 10 677512 4 9 834731 8 6 91987 9 4 907844 1 5 652146 2 1 60718 6 5 555396 3 7 531810 6 6 401437 5 3 593446 6 4 295196
output:
853416
result:
ok single line: '853416'
Test #6:
score: 5
Accepted
time: 307ms
memory: 4572kb
input:
9266 19317 1 2000 3207 0 8069 4574 0 4857 8821 0 909 2661 0 7210 4774 0 826 7545 0 4283 4611 0 1229 8673 0 6341 9026 0 802 1762 0 300 473 0 4052 3766 0 7111 5319 0 1990 6824 0 852 475 0 6355 2588 0 5422 3626 0 4821 8355 0 4834 3221 0 4271 2262 0 7394 355 0 2847 6719 0 9089 2365 0 5663 422 0 1473 164...
output:
2594
result:
ok single line: '2594'
Test #7:
score: 5
Accepted
time: 325ms
memory: 4652kb
input:
9867 19871 1 9288 6774 0 541 9347 0 6950 4826 0 6587 180 0 7573 2835 0 3347 5023 0 9466 2489 0 6733 4683 0 6602 3743 0 4904 5408 0 5450 8761 0 3978 757 0 1145 693 0 1468 5549 0 9020 5597 0 4440 2108 0 7673 8305 0 9334 1140 0 3547 8505 0 8427 6898 0 9442 8015 0 9340 8140 0 1554 3692 0 9050 9376 0 781...
output:
2877
result:
ok single line: '2877'
Test #8:
score: 5
Accepted
time: 326ms
memory: 4860kb
input:
9342 19240 1 249 8909 363065 7613 6678 408923 6498 4312 540704 8171 6096 761352 6802 1281 739632 2957 2957 120021 3220 8158 562021 2148 7482 723634 1758 5739 525798 4926 1915 619426 6351 8751 712231 2663 856 188902 2198 3030 289802 9100 3893 970430 4207 6036 61420 47 824 62081 8715 8435 132002 1783 ...
output:
1001128
result:
ok single line: '1001128'
Test #9:
score: 5
Accepted
time: 449ms
memory: 4844kb
input:
9513 18340 1 4654 8721 10267 515 6153 327507 8226 4028 335114 4721 4217 756930 5060 1050 858391 5698 7278 571067 1986 6553 42520 6238 7193 190453 3114 1405 877455 9508 8508 279405 5233 6525 871266 7195 7195 71784 6229 3086 801474 115 9026 131532 5871 1341 826938 2327 2637 975366 4580 2807 303507 696...
output:
999770
result:
ok single line: '999770'
Test #10:
score: 5
Accepted
time: 749ms
memory: 4848kb
input:
9572 18518 1 4142 7857 878799 5686 677 765800 4940 3448 573893 1991 8493 302843 1793 2837 528763 3828 3770 888931 7475 2040 31638 4722 7971 126370 2030 1064 104636 9154 145 678140 3680 5416 196350 7231 7591 381499 7372 5404 953492 1366 4379 181509 7630 7911 480363 4289 9121 899481 1593 1325 336779 8...
output:
1000022
result:
ok single line: '1000022'
Test #11:
score: 0
Time Limit Exceeded
input:
9640 18640 55 1955 5950 0 3202 7642 0 9543 8057 0 2009 904 0 3859 9114 0 6215 4770 0 901 9112 0 40 8654 0 3708 4823 0 4710 1206 0 2682 7482 0 7252 1525 0 5742 2055 0 6433 1846 0 4655 7575 0 1869 3137 0 981 3256 0 6787 8775 0 9457 1928 0 6474 5027 0 1360 571 0 7907 2457 0 5727 880 0 3259 3716 0 8725 ...
output:
result:
Test #12:
score: 0
Time Limit Exceeded
input:
9755 19120 88 4148 2875 0 5217 8212 0 2881 6290 0 8403 7450 0 6922 3068 0 1467 8661 0 8142 4011 0 2356 2117 0 1159 8427 0 6059 2953 0 4504 5230 0 1703 4652 0 7681 2262 0 4733 5664 0 3598 8005 0 388 388 0 9408 3377 0 5046 7386 0 2869 3002 0 8532 6788 0 6290 1193 0 4644 8820 0 3881 9139 0 3869 8824 0 ...
output:
result:
Test #13:
score: 0
Time Limit Exceeded
input:
9840 18511 80 8357 7609 0 2141 6907 0 6725 6524 0 2513 4614 0 4090 1499 0 5135 9333 0 774 1936 0 578 578 0 8208 4206 0 3331 1916 0 5851 2702 0 2848 4654 0 6111 5807 0 163 9509 0 4682 9576 0 7242 612 0 2395 8303 0 7920 8018 0 7942 2593 0 8913 6226 0 8671 3339 0 6888 8133 0 5391 881 0 6802 3427 0 6244...
output:
result:
Test #14:
score: 0
Time Limit Exceeded
input:
9504 18794 51 899 900 637797 5745 5751 70221 2068 2076 270062 343 344 142285 4313 4314 91858 2183 2184 69574 5732 5734 991959 1879 1886 382888 6423 6424 57934 4691 4692 886459 1374 1375 802248 6748 6749 473133 6505 6506 799627 8447 8448 157324 1661 1662 72178 4100 4110 233663 6621 6622 411454 4098 4...
output:
result:
Test #15:
score: 0
Time Limit Exceeded
input:
9821 18934 78 746 747 944389 5436 5437 947846 667 675 550292 4773 4779 96464 600 601 66269 8006 8010 470573 9713 9720 708785 2879 2885 227304 5562 5563 217676 840 841 188647 3502 3509 281168 3232 3234 105962 6779 6780 701790 8318 8327 12272 6431 6439 552094 5467 5468 838401 251 254 88679 3486 3496 2...
output:
result:
Test #16:
score: 0
Time Limit Exceeded
input:
9693 19498 97 500 8929 466939 4695 350 665912 2712 9144 132548 5668 7376 817512 2406 3652 786389 5057 5831 706611 692 2140 98634 3534 7603 10675 6251 5172 38255 8065 6935 238603 7948 92 550809 4899 6376 590515 6963 7095 182197 2775 4360 89655 4029 1959 380597 7563 7265 701907 5957 2574 728146 7210 8...
output:
result:
Test #17:
score: 0
Time Limit Exceeded
input:
9646 18363 83 435 121 888409 1613 6126 682103 6754 1494 826961 2568 7398 272799 961 2869 658914 9276 7979 771435 949 6590 853475 9198 181 445785 5848 4847 393874 6724 1611 746891 7801 287 339837 400 2493 533151 9400 8136 465405 6802 464 450995 1806 4308 910622 2541 141 550812 3363 6559 675984 8991 8...
output:
result:
Test #18:
score: 0
Time Limit Exceeded
input:
9313 18764 75 9266 2428 96888 1703 1499 51313 8426 9041 675850 7608 3527 752630 3283 466 412454 2093 5586 82055 3713 8741 632957 2580 8365 489655 2415 83 810805 6581 1608 304463 5207 1053 578271 5788 3384 195722 1592 927 182777 1648 1844 419354 46 7764 624893 4184 7389 264998 7131 3424 698477 3440 4...
output:
result:
Test #19:
score: 0
Time Limit Exceeded
input:
9708 18428 71 7276 2226 213027 3520 1734 914615 7363 7837 753125 6798 5303 688090 9369 2710 315744 203 8935 324640 7938 9099 342555 3149 4617 886453 6430 8948 268190 8092 4771 633297 4645 5213 945040 4352 4352 517062 8746 6419 124499 2970 1884 555057 3858 4767 105670 7890 1267 477651 6086 6877 86834...
output:
result:
Test #20:
score: 0
Time Limit Exceeded
input:
9490 19373 68 2413 8708 526411 9155 6622 92153 1990 2864 804840 6073 2924 595953 5487 8201 618375 4342 8047 42740 8420 3186 221604 6191 2577 555739 4022 4792 765954 8929 3200 403240 5390 7213 547290 2346 6643 425759 6069 3059 263528 3957 6471 785024 7409 4747 419974 6662 5627 327971 3941 4828 17760 ...