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...