QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#562776#8673. 最短路径guosoun0 5139ms175300kbC++172.3kb2024-09-13 20:44:392024-09-13 20:44:40

Judging History

你现在查看的是最新测评结果

  • [2024-09-13 20:44:40]
  • 评测
  • 测评结果:0
  • 用时:5139ms
  • 内存:175300kb
  • [2024-09-13 20:44:39]
  • 提交

answer

#include <bits/stdc++.h>
using ll = long long;
const int N = 2e5 + 10;

int main() {
  std::cin.tie(0)->sync_with_stdio(0);
  int n, m, q;
  ll seed;
  std::vector<std::vector<std::pair<int, ll>>> g[2];
  std::cin >> n >> m >> q >> seed;
  g[0].resize(n + 1), g[1].resize(n + 1);
  std::mt19937 gen(seed);
  unsigned max = -1u / n * n;
  auto sample = [&]() {
    unsigned x;
    do {
      x = gen();
    } while (x >= max);
    return x % n + 1;
  };
  while (m--) {
    int u = sample(), v = sample();
    ll w = gen();
    if (u == v) continue;
    g[0][u].emplace_back(v, w), g[1][v].emplace_back(u, w);
    // std::cerr << u << ' ' << v << ' ' << w << '\n';
  }
  for (int i = 1; i <= n; i++) {
    for (int t : {0, 1})
      std::sort(g[t][i].begin(), g[t][i].end(),
                [&](auto a, auto b) { return a.second < b.second; });
  }
  static bool vis[2][N];
  static ll dis[2][N];
  while (q--) {
    int s, t;
    std::cin >> s >> t;
    if (s == t) {
      std::cout << 0 << '\n';
      continue;
    }
    memset(dis, 0x3f, sizeof(dis));
    memset(vis, 0, sizeof(vis));
    std::priority_queue<std::tuple<ll, int, std::vector<std::pair<int, ll>>::iterator>> pq[2];
    dis[0][s] = 0, dis[1][t] = 0;
    if (g[0][s].size()) pq[0].emplace(g[0][s].begin()->second, s, g[0][s].begin()), vis[0][s] = 1;
    if (g[1][t].size()) pq[1].emplace(g[1][t].begin()->second, t, g[1][t].begin()), vis[1][t] = 1;
    int x = -1;
    for (int c = 0; pq[0].size() && pq[1].size(); c ^= 1) {
      auto [d, u, it] = pq[c].top();
      auto [v, w] = *it;
      pq[c].pop();
      if (std::next(it) != g[c][u].end()) pq[c].emplace(dis[c][u] + std::next(it)->second, u, std::next(it));
      if (vis[c][v]) continue;
      // std::cerr << c << ' ' << v<< ' ' << d << '\n';
      dis[c][v] = d, vis[c][v] = 1;
      if (vis[c ^ 1][v]) {
        x = v;
        break;
      }
      if (g[c][v].size()) pq[c].emplace(d + g[c][v].begin()->second, v, g[c][v].begin());
    }
    if (x == -1) {
      std::cout << -1 << '\n';
      continue;
    }
    ll ans = dis[0][x] + dis[1][x];
    for (int u = 1; u <= n; u++)
      if (vis[0][u])
        for (auto [v, w] : g[0][u])
          if (vis[1][v]) ans = std::min(ans, dis[0][u] + w + dis[1][v]);
    std::cout << ans << '\n';
  }
}
/*
5 10 1 249082683
1 2
*/

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 5
Accepted
time: 2ms
memory: 7060kb

input:

4 8 5 1112792816
2 3
4 3
4 3
3 2
1 4

output:

3419197189
1798364963
1798364963
3986398077
2337967903

result:

ok 5 lines

Test #2:

score: 5
Accepted
time: 248ms
memory: 7332kb

input:

2000 2000 2000 3336994405
659 1650
1678 341
818 235
1380 1865
1927 1366
1233 1673
267 1698
775 1022
1255 1110
1533 1928
1854 169
1579 729
449 1335
943 583
360 50
795 926
1584 911
1924 604
280 309
1429 420
1107 1858
1466 76
265 1109
1077 622
245 1941
957 1434
1560 1128
122 51
229 925
826 1006
851 323...

output:

-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
...

result:

ok 2000 lines

Test #3:

score: 0
Wrong Answer
time: 246ms
memory: 7224kb

input:

1000 2000 2000 1526732796
400 914
837 927
7 271
873 60
934 156
981 329
973 512
276 54
540 278
605 230
681 555
636 706
955 618
640 214
859 696
267 595
38 839
309 12
484 919
746 49
948 337
607 638
438 163
817 869
95 518
534 376
369 331
665 64
736 970
154 41
510 425
876 907
143 803
270 403
350 286
131 ...

output:

59904623239
-1
35500450276
44100407825
123850134981
50939933436
-1
6154157088
-1
57386187180
10597134504
20743442945
41359499813
-1
27245119019
68099995095
-1
-1
51956766819
77195363863
69201551894
63023959449
-1
75200846326
15485138820
-1
5265380455
-1
26369306773
-1
-1
-1
103358899866
24977306827
...

result:

wrong answer 1st lines differ - expected: '14198403396', found: '59904623239'

Subtask #2:

score: 0
Wrong Answer

Test #6:

score: 0
Wrong Answer
time: 2399ms
memory: 130296kb

input:

3000 3000000 10000 37461678
2873 1368
1757 2000
1262 1822
2484 1778
2055 2096
2545 366
2923 2028
1469 1874
691 631
1173 2967
894 2020
1207 881
373 236
1913 1923
1351 16
1066 2032
471 1561
1047 2043
457 145
2728 1752
2521 1199
1568 904
2515 543
1472 2161
748 2744
748 1908
912 172
2340 2494
977 267
10...

output:

124006081
88671769
166750148
27805775
140740946
74982035
157482381
125994263
103576920
113926616
141610509
119002449
50703016
103341135
164756810
123694963
75066811
198756129
158528990
93034371
138909252
129635229
180208598
182848742
133998654
146576966
164291065
115097665
104827545
105434067
252912...

result:

wrong answer 1st lines differ - expected: '36084543', found: '124006081'

Subtask #3:

score: 0
Wrong Answer

Test #13:

score: 0
Wrong Answer
time: 1285ms
memory: 26520kb

input:

200000 200000 10000 1824322211
104482 112162
130667 13436
36792 142259
51832 97549
15358 180076
128251 92635
45296 195115
62109 38014
22014 86754
79735 103777
94797 96086
196760 5955
45622 59618
12995 62585
55686 156402
23085 68138
170749 148553
97603 160274
112975 22651
116322 190720
84774 57075
23...

output:

-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
...

result:

wrong answer 679th lines differ - expected: '172751101166', found: '278595429405'

Subtask #4:

score: 0
Wrong Answer

Test #17:

score: 0
Wrong Answer
time: 3832ms
memory: 42444kb

input:

200000 500000 10000 3113327438
68816 31422
174349 125983
18111 188786
84806 87249
142007 180723
95611 116398
104758 196349
77547 89859
120350 77199
110906 10209
177461 194861
115505 105566
27493 166237
15676 158290
86204 116010
159979 125659
132461 61989
194289 157721
18830 82910
166696 98162
125208...

output:

318799345651
-1
388484660922
1642164601046
-1
654398237439
-1
-1
1598029899724
1112048403066
-1
-1
522609585381
549083937601
1146065708873
-1
-1
-1
212236159646
880886090002
1436215921900
830939416944
-1
636629719537
1665344012955
547324399452
-1
1008869361349
315279636469
-1
640626466690
7245817163...

result:

wrong answer 1st lines differ - expected: '21671419385', found: '318799345651'

Subtask #5:

score: 0
Wrong Answer

Test #21:

score: 0
Wrong Answer
time: 3549ms
memory: 42176kb

input:

200000 500000 10000 1843053063
3409 108359
168924 184622
13119 119837
109492 38050
97152 51201
49047 12472
183998 191613
193074 177289
194248 104409
15509 88499
61967 143398
4532 56790
196650 158711
63655 70744
140178 107299
63530 87330
127334 159237
7134 184418
125289 28604
176966 179527
181695 128...

output:

611326275577
179351859890
370142225993
649231266562
-1
365807638986
1123033762416
362094808599
464411753222
417543876210
373739998636
818444060751
1076487902945
891699323994
599896729479
707649956125
531439131777
-1
-1
1089058106838
1186878499759
980389100283
199119219279
182343302818
519529819523
4...

result:

wrong answer 1st lines differ - expected: '18098332289', found: '611326275577'

Subtask #6:

score: 0
Wrong Answer

Test #24:

score: 0
Wrong Answer
time: 3554ms
memory: 168384kb

input:

100000 3000000 10000 3892765041
14843 34156
43390 49542
38564 95501
26194 87126
18638 53346
69414 47011
95472 58303
44370 77172
75652 90555
94386 31888
47911 9905
70599 97061
52764 24896
31445 15589
82314 43852
97155 93412
11834 45082
75614 42459
67802 32024
82389 4968
32860 62514
97630 28012
14839 ...

output:

19352439034
18667511741
17946368475
22649684614
42921007684
22780236477
5835727247
21800002900
23641020961
4247923828
15116434401
25381803778
12318196683
21216646432
19269274443
16023861000
40359696346
14381881132
18242150859
10783004161
14366802091
12514370506
21685735080
18889129728
10100843845
18...

result:

wrong answer 1st lines differ - expected: '1547972368', found: '19352439034'

Subtask #7:

score: 0
Wrong Answer

Test #33:

score: 0
Wrong Answer
time: 5139ms
memory: 175300kb

input:

200000 3000000 10000 3910662331
161257 40967
50546 86049
199665 199302
177403 36274
158790 143151
193304 78511
28032 149723
96394 37099
2157 76024
195400 34830
41933 147591
191613 96468
194837 67293
57992 63117
24749 6694
117818 87323
46130 53470
174812 24950
149173 124886
119910 54123
2297 124533
5...

output:

43579730145
80119113502
67951540108
68335515046
69793819577
40931740543
40654273185
23029266674
59421813955
74353758169
42352064706
70148177540
18267311855
28238630546
73190105604
91030504317
46999439115
98655575637
104148087584
27831435107
59328037376
49238586773
20527892357
83819031391
43554135472...

result:

wrong answer 1st lines differ - expected: '3371897180', found: '43579730145'