Submission #618541

#TimeUsernameProblemLanguageResultExecution timeMemory
618541joelauRoad Construction (JOI21_road_construction)C++14
18 / 100
658 ms59356 KiB
#include <bits/stdc++.h> using namespace std; long long N,K; pair<long long,long long> lst[250005]; vector<long long> A; priority_queue< tuple<long long,long long,long long>, vector< tuple<long long,long long,long long> >, greater< tuple<long long,long long,long long> > > pq; set< pair<long long,long long> > s; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> N >> K; for (long long i = 0; i < N; ++i) cin >> lst[i].first >> lst[i].second; if (N <= 1000) { for (long long i = 0; i < N; ++i) for (long long j = i+1; j < N; ++j) A.push_back(abs(lst[i].first-lst[j].first)+abs(lst[i].second-lst[j].second)); sort(A.begin(),A.end()); for (long long i = 0; i < K; ++i) cout << A[i] << '\n'; } else { sort(lst,lst+N); for (long long i = 0; i < N-1; ++i) { pq.emplace(abs(lst[i+1].first-lst[i].first)+abs(lst[i+1].second-lst[i].second),i,i+1); s.emplace(i,i+1); } long long cnt = 0; while (!pq.empty() && cnt < K) { long long d,a,b; tie(d,a,b) = pq.top(); pq.pop(); cout << d << '\n'; cnt++; if (a != 0 && s.find(make_pair(a-1,b)) == s.end()) { pq.emplace(abs(lst[b].first-lst[a-1].first)+abs(lst[b].second-lst[a-1].second),a-1,b); s.emplace(a-1,b); } if (b != N-1 && s.find(make_pair(a,b+1)) == s.end()) { pq.emplace(abs(lst[b+1].first-lst[a].first)+abs(lst[b+1].second-lst[a].second),a,b+1); s.emplace(a,b+1); } } } 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...