Submission #1176495

#TimeUsernameProblemLanguageResultExecution timeMemory
1176495vjudge2Building Skyscrapers (CEOI19_skyscrapers)C++20
34 / 100
145 ms6248 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 1.5e5 + 10;
int n, r[N], c[N];
map<pair<int, int>, int> mp;

vector<int> check(int s) {
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> q;
    q.push({0, s});
    vector<int> mh(n + 1, 0);
    vector<bool> inq(n + 1, 0);
    for (int i = 1; i <= n; i++) {
        if (i != s) {
            mh[i] = abs(r[i] - r[s]) + abs(c[i] - c[s]);
        }
    }
    inq[s] = 1;
    vector<int> seq;
    while (!q.empty()) {
        auto [di, u] = q.top();
        seq.push_back(u);
        q.pop();
        for (int i = -1; i <= 1; i++) {
            for (int j = -1; j <= 1; j++) {
                if (!i && !j) continue;
                if (mp.count({r[u] + i, c[u] + j})) {
                    int k = mp[{r[u] + i, c[u] + j}];
                    if (inq[k]) continue;
                    inq[k] = 1;
                    q.push({mh[k], k});
                }
            }
        }
    }
    return seq;
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int sbt;
    cin >> n >> sbt;
    for (int i = 1; i <= n; i++) {
        cin >> r[i] >> c[i];
        mp[{r[i], c[i]}] = i;
    }
    for (int i = 1; i <= n; i++) {
        vector<int> rr = check(i);
        if (rr.size() == n) {
            cout << "YES\n";
            for (int j = 0; j < n; j++) cout << rr[j] << "\n";
            return 0;
        } else {
            cout << "NO\n";
            return 0;
        }
    }
    cout << "NO\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...