QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#507168#8643. Board GameMax_s_xaM0 253ms8092kbC++174.7kb2024-08-06 11:55:312024-08-06 11:55:33

Judging History

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

  • [2024-08-06 11:55:33]
  • 评测
  • 测评结果:0
  • 用时:253ms
  • 内存:8092kb
  • [2024-08-06 11:55:31]
  • 提交

answer

#include <iostream>
#include <algorithm>
#include <queue>

typedef long long ll;
typedef double lf;

// #define DEBUG 1
struct IO
{
    #define MAXSIZE (1 << 20)
    #define isdigit(x) (x >= '0' && x <= '9')
    char buf[MAXSIZE], *p1, *p2;
    char pbuf[MAXSIZE], *pp;
    #if DEBUG
    #else
    IO() : p1(buf), p2(buf), pp(pbuf) {}
    ~IO() {fwrite(pbuf, 1, pp - pbuf, stdout);}
    #endif
    #define gc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, MAXSIZE, stdin), p1 == p2) ? ' ' : *p1++)
    #define blank(x) (x == ' ' || x == '\n' || x == '\r' || x == '\t')

    template <typename T>
    void Read(T &x)
    {
        #if DEBUG
        std::cin >> x;
        #else
        bool sign = 0; char ch = gc(); x = 0;
        for (; !isdigit(ch); ch = gc())
            if (ch == '-') sign = 1;
        for (; isdigit(ch); ch = gc()) x = x * 10 + (ch ^ 48);
        if (sign) x = -x;
        #endif
    }
    void Read(char *s)
    {
        #if DEBUG
        std::cin >> s;
        #else
        char ch = gc();
        for (; blank(ch); ch = gc());
        for (; !blank(ch); ch = gc()) *s++ = ch;
        *s = 0;
        #endif
    }
    void Read(char &c) {for (c = gc(); blank(c); c = gc());}

    void Push(const char &c)
    {
        #if DEBUG
        putchar(c);
        #else
        if (pp - pbuf == MAXSIZE) fwrite(pbuf, 1, MAXSIZE, stdout), pp = pbuf;
        *pp++ = c;
        #endif
    }
    template <typename T>
    void Write(T x)
    {
        if (x < 0) x = -x, Push('-');
        static T sta[35];
        int top = 0;
        do sta[top++] = x % 10, x /= 10; while (x);
        while (top) Push(sta[--top] ^ 48);
    }
    template <typename T>
    void Write(T x, char lst) {Write(x), Push(lst);}
} IO;
#define Read(x) IO.Read(x)
#define Write(x, y) IO.Write(x, y)
#define Put(x) IO.Push(x)

using namespace std;

const int MAXN = 5e4 + 10;

int n, m, k, s[MAXN]; ll ans[MAXN];
vector <int> e[MAXN];

char tp[MAXN]; int val[MAXN];

int dis[MAXN], cnt[MAXN];
inline void BFS1(int S)
{
    static queue <int> q;
    for (int i = 1; i <= n; i++) dis[i] = -1, cnt[i] = 0;
    dis[S] = 0, q.push(S);
    while (!q.empty())
    {
        int u = q.front(); q.pop();
        if (u != S && tp[u] == '1') cnt[u]++;
        for (auto v : e[u])
            if (dis[v] == -1)
                dis[v] = dis[u] + 1, cnt[v] = cnt[u], q.push(v);
            else if (dis[v] == dis[u] + 1) cnt[v] = max(cnt[v], cnt[u] + (tp[v] == '1'));
    }
}

ll sum[MAXN];

ll d[MAXN];
inline void BFS2(int s, int x)
{
    static queue <int> q[2];
    for (int i = 1; i <= n; i++) d[i] = 1e18, dis[i] = cnt[i] = 0;
    d[s] = 0, q[0].push(s);
    while (!q[0].empty() || !q[1].empty())
    {
        int u;
        if (q[1].empty() || (!q[0].empty() && d[q[0].front()] < d[q[1].front()])) u = q[0].front(), q[0].pop();
        else u = q[1].front(), q[1].pop();
        for (auto v : e[u])
            if (d[v] > d[u] + 1)
            {
                d[v] = d[u] + 1, dis[v] = dis[u] + 1, cnt[v] = cnt[u];
                if (tp[v] == '1') cnt[v]++, d[v] += x, q[1].push(v);
                else q[0].push(v);
            }
    }
}

int main()
{
    // freopen("04-02.in", "r", stdin);
    // freopen("A.out", "w", stdout);
    #if DEBUG
    #else
    ios::sync_with_stdio(0), cin.tie(0);
    #endif
    Read(n), Read(m), Read(k);
    for (int i = 1, u, v; i <= m; i++) Read(u), Read(v), e[u].push_back(v), e[v].push_back(u);
    Read(tp + 1);
    for (int i = 1; i <= k; i++) Read(s[i]);

    for (int i = 1; i <= n; i++)
        if (tp[i] == '1')
        {
            val[i] = 2;
            for (auto v : e[i])
                if (tp[v] == '1') { val[i] = 1; break; }
        }

    for (int i = 2; i <= k; i++)
    {
        BFS1(s[i]);
        int mn[3] = {0, (int)2e9, (int)2e9};
        for (int j = 1; j <= n; j++)
            if (tp[j] == '1' && j != s[i])
                mn[val[j]] = min(mn[val[j]], dis[j]);
        if (tp[s[i]] == '1') mn[val[s[i]]] = min(mn[val[s[i]]], 2);
        int cc = 2e9;
        for (int j = 1; j <= n; j++)
            if (val[j] == 1 && mn[1] == dis[j]) cc = min(cc, cnt[j]);
        for (int j = 1; j <= n; j++)
        {
            int cur = min(j + mn[1] - 1, 2 * j + mn[2] - 2);
            if (j > cc) cur = min(cur, j - cc + mn[1]);
            sum[j] += cur;
        }
    }

    for (int i = 1; i <= n; i++) ans[i] = 1e18; ans[s[1]] = 0;
    for (int i = 0; i <= n; i++)
    {
        BFS2(s[1], i);
        for (int j = 1; j <= n; j++)
            if (j != s[1]) ans[j] = min(ans[j], sum[cnt[j] - (tp[j] == '1')] + dis[j]);
    }
    for (int i = 1; i <= n; i++) cout << ans[i] << '\n';
    return 0;
}

详细

Subtask #1:

score: 0
Time Limit Exceeded

Test #1:

score: 3
Accepted
time: 244ms
memory: 5876kb

input:

3000 3000 3000
2378 2385
1560 2450
189 2980
44 1140
425 1843
167 1563
439 2010
7 951
1311 1370
1305 2085
150 1600
16 2469
431 2674
317 2191
1845 2918
2195 2917
1210 1577
125 1049
911 1160
504 2060
376 2420
1676 2969
1343 1576
284 1869
835 1989
273 1330
234 1906
1482 1524
2415 2460
388 2897
2177 2600...

output:

76
52
40
54
67
54
62
36
44
32
60
61
58
29
34
22
64
25
31
33
14
79
80
58
68
29
67
69
47
60
48
55
45
11
24
51
17
24
47
29
50
57
89
54
62
63
55
61
7
41
61
27
64
60
63
55
44
43
39
48
57
47
65
65
55
43
51
48
22
57
47
28
52
51
50
61
41
61
69
50
41
53
42
58
45
26
60
52
30
56
47
56
32
55
44
58
56
71
69
41
6...

result:

ok 3000 lines

Test #2:

score: 0
Time Limit Exceeded

input:

30000 30000 30000
11640 15443
5731 12870
5066 28442
11803 29263
2399 20658
4911 11282
676 1962
10390 19686
6117 6722
22155 28614
2932 14721
11403 13488
6697 22434
19113 26975
20347 20663
15743 16072
19116 25652
10891 19389
1373 27384
14607 29107
6192 29223
7196 10267
15467 16280
21828 26032
365 982
...

output:


result:


Subtask #2:

score: 0
Time Limit Exceeded

Test #5:

score: 7
Accepted
time: 242ms
memory: 8092kb

input:

3000 3000 3000
1391 1542
299 1578
1346 1528
46 1259
1513 2261
201 1717
56 1635
199 2327
847 882
1977 2161
465 1954
1723 2580
482 2105
906 2207
747 2742
2026 2845
1565 1809
295 311
278 2408
1215 2583
520 832
464 638
1223 1346
1799 2703
1022 2717
887 2160
619 2109
165 2478
879 1343
319 2463
56 815
109...

output:

25
47
29
15
51
29
39
23
47
39
23
39
27
39
5
39
19
26
30
31
43
32
39
86790
24
13
86787
52
31
24
36
22
33
31
32
22
36
43
24
25
30
32
86793
31
49
34
31
31
39
21
33
86793
34
40
23
43
44
37
32
37
48
86790
33
86783
42
46
28
86787
15
47
43
42
41
39
38
14
34
42
33
86775
24
37
36
12
14
28
47
43
34
27
45
41
1...

result:

ok 3000 lines

Test #6:

score: 0
Time Limit Exceeded

input:

30000 30000 30000
15802 26734
1581 27129
4313 12830
7001 28197
5489 10268
11838 19275
11260 21410
3519 29279
932 23073
8888 28355
17227 29224
1060 5702
20326 25420
1598 14082
15716 27167
4982 19730
4497 8783
15068 19181
7588 9083
4816 21808
15694 24819
4716 27198
14003 15119
5397 11717
3612 20613
24...

output:


result:


Subtask #3:

score: 0
Time Limit Exceeded

Test #13:

score: 7
Accepted
time: 253ms
memory: 6060kb

input:

3000 3000 3000
997 1695
884 1068
654 1853
6 520
947 2382
787 2407
818 1795
2347 2718
46 1560
1180 2169
582 1881
1080 1766
770 2877
365 419
365 749
1315 2536
223 1867
216 545
1311 1952
1598 2796
141 620
1681 2938
301 2204
866 1710
872 961
369 466
2160 2936
2295 2359
1310 1744
1572 2088
1111 2618
1680...

output:

357
518
350
113
154
370
718
974
1389
588
1322
215
670
9
870
488
375
195
1102
149
1373
944
303
508
1217
19
920
646
699
713
1152
1247
555
751
80
50
584
1361
149
921
140
1183
989
667
455
198
180
813
472
71
112
169
331
600
666
31
860
145
1090
207
496
654
825
1330
278
112
690
1152
885
1412
94
96
771
132
...

result:

ok 3000 lines

Test #14:

score: 0
Time Limit Exceeded

input:

30000 30000 30000
5947 19048
4004 18741
10068 24221
13216 23775
14185 17633
2653 21744
87 19566
5657 19635
24673 28265
5039 14021
8019 20341
7620 25285
6719 8806
15262 25748
14231 28690
21585 29569
27254 27866
12665 29102
2884 11669
2014 11831
1927 26375
9676 21506
2114 28403
18249 27263
4937 8497
6...

output:


result:


Subtask #4:

score: 0
Wrong Answer

Test #23:

score: 19
Accepted
time: 24ms
memory: 7828kb

input:

1500 3000 2
432 1120
324 1221
37 294
50 931
588 1149
178 887
460 517
268 533
649 935
123 1291
642 1025
1145 1489
630 1375
163 1407
842 1004
155 1300
296 1049
380 840
215 1224
283 981
211 1056
75 725
325 1437
591 680
1179 1253
876 1425
382 1230
1065 1436
612 784
121 770
349 633
140 1168
443 1019
103 ...

output:

6
6
7
4
5
5
6
3
5
7
5
6
5
5
5
6
6
6
3
5
5
6
3
6
5
6
3
3
6
6
5
6
4
5
7
6
6
6
5
2
5
5
6
5
4
7
4
4
5
5
5
7
6
5
5
3
6
6
5
5
6
5
6
4
5
6
4
7
3
6
6
4
5
5
4
7
6
6
6
7
5
3
5
6
4
6
4
6
4
6
4
6
5
6
3
4
6
4
5
3
6
5
6
7
4
6
5
6
7
5
4
6
5
5
6
6
6
4
5
5
6
4
4
6
6
6
6
6
6
6
6
5
6
6
5
6
4
6
5
6
6
6
6
5
7
4
6
4
6
5
...

result:

ok 1500 lines

Test #24:

score: 19
Accepted
time: 92ms
memory: 7884kb

input:

3000 2999 5
1183 2619
603 1077
245 1639
988 1253
70 2760
2292 2975
2483 2998
851 1914
214 968
1902 2025
1636 2835
62 2320
2082 2708
267 1972
613 2739
1273 2062
2173 2928
1028 1532
417 2184
291 899
608 2280
922 1566
670 1218
1023 1213
1193 2777
1142 2410
532 1558
67 1473
1041 1652
146 1877
727 2468
5...

output:

79
79
73
72
58
44
91
58
84
78
57
26
82
33
20
109
42
73
114
63
87
59
75
42
87
117
71
56
97
17
29
87
105
40
107
143
44
41
83
101
22
13
88
97
19
40
71
70
15
113
89
97
64
90
66
112
28
88
126
56
50
17
115
17
69
83
92
23
48
135
50
53
77
71
88
87
93
54
25
15
112
69
73
30
72
66
10
66
88
67
67
90
74
78
75
28...

result:

ok 3000 lines

Test #25:

score: 19
Accepted
time: 112ms
memory: 8092kb

input:

3000 2999 376
1269 2828
540 2100
459 2192
1176 2286
1449 1461
2568 2836
511 1436
1580 2036
1623 1837
554 2879
2222 2286
1316 2997
280 337
870 1575
77 2864
10 1424
588 2960
677 2959
254 548
691 1544
346 1337
591 2329
151 1896
305 2577
742 819
1544 2646
679 2071
219 2786
1732 2454
61 1247
1535 2704
10...

output:

684
874
611
580
355
22
246
797
0
415
770
67087
853
67274
298
68077
884
433
110
68087
67193
293
67294
323
705
221
696
67242
33
62
858
242
58
67176
67031
29
67210
67036
67136
805
267
759
28
239
67064
68055
67036
336
67107
67022
316
442
234
703
766
113
373
184
68070
29
717
59
67128
214
825
409
201
6809...

result:

ok 3000 lines

Test #26:

score: 0
Wrong Answer
time: 110ms
memory: 7848kb

input:

2990 3000 25
926 979
752 2267
861 2664
92 2235
1338 1549
5 1674
394 2828
198 2419
328 1655
2230 2675
1946 2452
1460 2590
306 2972
27 1195
1755 2511
38 1631
1518 1734
2799 2869
54 514
1022 2346
410 845
491 2867
1604 2130
666 1955
817 1398
1738 2230
220 495
595 771
470 2755
413 2945
1437 2785
2545 276...

output:

91
109
165
96
123
129
155
223
166
164
99
195
129
276
192
6
193
256
207
105
322
245
208
268
329
251
246
240
97
223
199
97
159
328
52
61
8
160
221
244
0
216
61
309
190
119
63
276
89
226
255
100
286
12
225
224
303
171
220
107
281
84
195
66
164
93
257
131
250
151
170
248
131
98
131
93
129
7
60
280
275
9...

result:

wrong answer 824th lines differ - expected: '319', found: '323'

Subtask #5:

score: 0
Time Limit Exceeded

Test #44:

score: 0
Time Limit Exceeded

input:

50000 49999 2
25634 31370
8027 24849
12312 23307
3731 32856
28725 29829
23424 44542
9950 43281
17138 22049
29393 31047
24061 46387
861 3924
12114 24868
29242 36744
5090 11267
3946 26100
7151 22151
27368 49971
43548 44917
25373 45846
4117 43120
24675 34139
9043 21081
29857 41278
37558 41510
11300 402...

output:


result:


Subtask #6:

score: 0
Skipped

Dependency #5:

0%

Subtask #7:

score: 0
Skipped

Dependency #4:

0%

Subtask #8:

score: 0
Skipped

Dependency #1:

0%