CSES - Datatähti Open 2021 - Results
Submission details
Task:Distances
Sender:mofk
Submission time:2021-01-30 17:28:53 +0200
Language:C++ (C++17)
Status:READY
Result:29
Feedback
groupverdictscore
#1ACCEPTED29
#20
Test results
testverdicttimegroup
#1ACCEPTED0.01 s1, 2details
#20.02 s2details

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:45:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int i = 1; i < ord.size(); ++i) {
                         ~~^~~~~~~~~~~~
input/code.cpp:47:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for (int j = 0; j <= ans.size(); ++j) {
                             ~~^~~~~~~~~~~~~
input/code.cpp:50:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                 if (j < ans.size() && d[u][ans[j]] > 3) ok = false;
                     ~~^~~~~~~~~~~~

Code

#include <bits/stdc++.h>

using namespace std;

int n;
vector<int> g[105];
int d[105][105];

int main(void) {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int ntest;
    cin >> ntest;
    while (ntest--) {
        cin >> n;
        for (int i = 1; i <= n; ++i) g[i].clear();
        for (int i = 1; i < n; ++i) {
            int u, v;
            cin >> u >> v;
            g[u].push_back(v);
            g[v].push_back(u);
        }

        memset(d, -1, sizeof d);
        for (int i = 1; i <= n; ++i) {
            queue<int> q;
            q.push(i);
            d[i][i] = 0;
            while (!q.empty()) {
                int u = q.front(); q.pop();
                for (auto v: g[u]) if (d[i][v] == -1) {
                    d[i][v] = d[i][u] + 1;
                    q.push(v);
                }
            }
        }

        vector<int> ord(n, 0);
        iota(ord.begin(), ord.end(), 1);
        sort(ord.begin(), ord.end(), [](int x, int y) {
                return d[1][x] < d[1][y];
             });
        vector<int> ans;
        ans.push_back(ord[0]);
        for (int i = 1; i < ord.size(); ++i) {
            int u = ord[i];
            for (int j = 0; j <= ans.size(); ++j) {
                bool ok = true;
                if (j && d[u][ans[j - 1]] > 3) ok = false;
                if (j < ans.size() && d[u][ans[j]] > 3) ok = false;
                if (ok) {
                    ans.insert(ans.begin() + j, u);
                    break;
                }
            }
        }

        for (auto x: ans) cout << x << ' ';
        cout << endl;
    }
    return 0;
}

Test details

Test 1

Group: 1, 2

Verdict: ACCEPTED

input
100
8
5 2
2 3
3 7
...

correct output
1 8 2 5 6 7 3 4 
1 7 2 8 3 6 4 5 
1 4 6 2 7 5 8 3 
1 8 3 2 4 7 6 5 
1 6 4 7 5 2 3 8 
...

user output
6 5 7 2 3 8 4 1 
6 4 5 7 2 8 3 1 
7 5 2 8 6 4 3 1 
3 8 7 4 2 6 5 1 
5 2 7 3 4 8 6 1 
...
Truncated

Test 2

Group: 2

Verdict:

input
100
100
37 59
81 37
44 81
...

correct output
1 99 82 81 59 5 71 55 17 24 13...

user output
47 11 93 12 44 41 40 76 66 8 2...
Truncated