Submission #1176497

#TimeUsernameProblemLanguageResultExecution timeMemory
1176497vjudge2Building Skyscrapers (CEOI19_skyscrapers)C++20
34 / 100
141 ms7512 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<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; } int32_t main() { ios::sync_with_stdio(0); cin.tie(0); int sbt; cin >> n >> sbt; int mnr = inf, id; 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], id = i; } vector<int> rr = check(id); if (rr.size() == n) { cout << "YES\n"; for (int j = 0; j < n; j++) cout << rr[j] << "\n"; } else { 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...