제출 #618541

#제출 시각아이디문제언어결과실행 시간메모리
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...