제출 #1176612

#제출 시각아이디문제언어결과실행 시간메모리
1176612vjudge2Building Skyscrapers (CEOI19_skyscrapers)C++20
54 / 100
256 ms15564 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

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

vector<int> check(int s) {
    priority_queue<array<int, 3>, vector<array<int, 3>>, greater<>> q;
    q.push({c[s], r[s], 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 [asdf, asdf2, 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({c[k], r[k], k});
                }
            }
        }
    }
    return seq;
}

int32_t main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int sbt;
    cin >> n >> sbt;
    int mnr = inf, id1 = 0, mxr = -inf, id2 = 0, mnc = inf, id3 = 0, mxc = -inf, id4 = 0;
    for (int i = 1; i <= n; i++) {
        cin >> r[i] >> c[i];
        mp[{r[i], c[i]}] = i;
        if (r[i] < mnr) mnr = r[i], id1 = i;
        if (r[i] > mxr) mxr = r[i], id2 = i;
        if (c[i] < mnc) mnc = c[i], id3 = i;
        if (c[i] > mxc) mxc = c[i], id4 = i;
    }
    for (auto& id : vector<int> {id3}) {
        vector<int> rr = check(id);
        if (rr.size() == n) {
            cout << "YES\n";
            for (int j = 0; j < n; j++) cout << rr[j] << "\n";
            return 0;
        }
    }
    cout << "NO\n";
    return 0;
}
#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...