CSES - NOI 2024 - Results
Submission details
Task:Anime Shops
Sender:Erik Adebahr
Submission time:2024-03-19 18:26:35 +0200
Language:C++ (C++17)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED23
#2ACCEPTED16
#3ACCEPTED61
Test results
testverdicttimegroup
#1ACCEPTED0.01 s1, 3details
#2ACCEPTED0.01 s1, 3details
#3ACCEPTED0.01 s1, 3details
#4ACCEPTED0.01 s1, 3details
#5ACCEPTED0.21 s3details
#6ACCEPTED0.22 s3details
#7ACCEPTED0.21 s3details
#8ACCEPTED0.25 s3details
#9ACCEPTED0.10 s2, 3details
#10ACCEPTED0.10 s2, 3details
#11ACCEPTED0.14 s2, 3details
#12ACCEPTED0.10 s3details
#13ACCEPTED0.09 s3details
#14ACCEPTED0.10 s3details
#15ACCEPTED0.05 s3details
#16ACCEPTED0.10 s3details

Code

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

typedef vector<ll> vl;
typedef vector<vl> vvl;

int main() {
  ll n, m, k;
  cin >> n >> m >> k;

  vl shops(k);
  for (int i = 0; i < k; i++) {
    ll tmp;
    cin >> tmp;
    shops[i] = --tmp;
  }

  vvl adj(n, vl());

  for (int i = 0; i < m; i++) {
    ll u, v;
    cin >> u >> v;

    adj[--u].push_back(--v);
    adj[v].push_back(u);
  }

  // BFS
  vl ans(n, -1);
  vl roots(n, -1);
  vl q;

  for (auto i : shops) {
    q.push_back(i);
  }

  for (auto i : shops)
    roots[i] = i;

  ll layer = 0;
  while (!q.empty()) {
    // cout << "New layer\n";
    layer++;
    vl nq;

    for (auto v : q) {
      for (auto w : adj[v]) {
        if (roots[w] == -1) {
          ans[w] = layer;
          roots[w] = roots[v];
          nq.push_back(w);
        } else if (roots[v] != roots[w]) {
          ll ansv = ans[v], answ = ans[w];

          if (v == roots[v]) {
            ansv = 0;
          }

          if (w == roots[w]) {
            answ = 0;
          }

          ans[roots[v]] = min(ansv + 1 + answ, ans[roots[v]]);
          ans[roots[w]] = min(ansv + 1 + answ, ans[roots[w]]);

          if (ans[roots[v]] == -1) {
            ans[roots[v]] = ansv + 1 + answ;
          }

          if (ans[roots[w]] == -1) {
            ans[roots[w]] = answ + 1 + ansv;
          }
        }
      }
    }
    q = nq;
  }

  // Display the answer

  for (auto i : ans) {
    cout << i << " ";
  }
  cout << endl;
}

Test details

Test 1

Group: 1, 3

Verdict: ACCEPTED

input
1000 2000 1
816
1 868
976 995
377 536
...

correct output
4 3 3 4 6 4 -1 4 5 2 2 5 5 3 5...

user output
4 3 3 4 6 4 -1 4 5 2 2 5 5 3 5...
Truncated

Test 2

Group: 1, 3

Verdict: ACCEPTED

input
1000 2000 20
578 955 222 813 494 962 753 71...

correct output
5 6 4 3 4 2 -1 3 3 3 4 3 2 3 -...

user output
5 6 4 3 4 2 -1 3 3 3 4 3 2 3 -...
Truncated

Test 3

Group: 1, 3

Verdict: ACCEPTED

input
1000 2000 100
945 230 119 680 975 520 490 28...

correct output
2 2 3 -1 2 -1 3 2 2 1 2 -1 3 2...

user output
2 2 3 -1 2 -1 3 2 2 1 2 -1 3 2...
Truncated

Test 4

Group: 1, 3

Verdict: ACCEPTED

input
1000 2000 1000
150 443 960 545 218 487 896 38...

correct output
1 -1 1 1 -1 1 1 1 -1 1 1 1 -1 ...

user output
1 -1 1 1 -1 1 1 1 -1 1 1 1 -1 ...
Truncated

Test 5

Group: 3

Verdict: ACCEPTED

input
100000 200000 1
77222
59470 61811
43092 48939
14395 19964
...

correct output
8 10 8 8 8 8 8 8 9 7 7 8 8 8 6...

user output
8 10 8 8 8 8 8 8 9 7 7 8 8 8 6...
Truncated

Test 6

Group: 3

Verdict: ACCEPTED

input
100000 200000 20
70440 82302 64483 96767 51485 ...

correct output
-1 8 6 5 5 7 6 7 6 6 8 5 6 4 5...

user output
-1 8 6 5 5 7 6 7 6 6 8 5 6 4 5...
Truncated

Test 7

Group: 3

Verdict: ACCEPTED

input
100000 200000 100
68738 37820 55519 77758 46482 ...

correct output
4 5 5 5 5 4 6 -1 5 4 5 6 4 5 5...

user output
4 5 5 5 5 4 6 -1 5 4 5 6 4 5 5...
Truncated

Test 8

Group: 3

Verdict: ACCEPTED

input
100000 200000 100000
47137 80137 73347 78145 9205 6...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
Truncated

Test 9

Group: 2, 3

Verdict: ACCEPTED

input
100000 99999 1
44158
1 2
2 3
3 4
...

correct output
44157 44156 44155 44154 44153 ...

user output
44157 44156 44155 44154 44153 ...
Truncated

Test 10

Group: 2, 3

Verdict: ACCEPTED

input
100000 99999 20
44158 25720 84658 90057 99607 ...

correct output
361 360 359 358 357 356 355 35...

user output
361 360 359 358 357 356 355 35...
Truncated

Test 11

Group: 2, 3

Verdict: ACCEPTED

input
100000 99999 100000
44158 25720 84658 90057 99607 ...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
Truncated

Test 12

Group: 3

Verdict: ACCEPTED

input
100000 99999 3
99998 99999 100000
1 2
1 3
1 4
...

correct output
33333 33332 33332 33332 33331 ...

user output
33333 33332 33332 33332 33331 ...
Truncated

Test 13

Group: 3

Verdict: ACCEPTED

input
100000 99999 300
99701 99702 99703 99704 99705 ...

correct output
333 333 333 333 333 333 333 33...

user output
333 333 333 333 333 333 333 33...
Truncated

Test 14

Group: 3

Verdict: ACCEPTED

input
100000 99999 30000
70001 70002 70003 70004 70005 ...

correct output
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ...

user output
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ...
Truncated

Test 15

Group: 3

Verdict: ACCEPTED

input
100000 0 100000
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

correct output
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...

user output
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
Truncated

Test 16

Group: 3

Verdict: ACCEPTED

input
100000 100000 2
1 50001
1 2
2 3
3 4
...

correct output
50000 1 2 3 4 5 6 7 8 9 10 11 ...

user output
50000 1 2 3 4 5 6 7 8 9 10 11 ...
Truncated