#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<pair<int, int>, vector<pair<int, int>>, greater<>> q;
q.push({c[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 [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({c[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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |