제출 #63715

#제출 시각아이디문제언어결과실행 시간메모리
63715bazsi700섬 항해 (CEOI13_adriatic)C++14
25 / 100
2115 ms257256 KiB
#include <bits/stdc++.h>
using namespace std;

#define MOD 1000000007
#define ll long long int
#define vi vector<int>
#define vii vector< vector<int> >
#define PI 3.1415926535897932384626433832795
#define INF 9223372036854775807LL


int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	int n;
	cin >> n;
	vii graph(n,vi());
	vector<pair<pair<int,int>,int> > cord (n);
	vector<int> r(n);
	vector<int> c(n);
	for(int i = 0; i < n; i++) {
		cin >> r[i] >> c[i];
		cord[i] = {{r[i],c[i]},i};
	}
	sort(cord.begin(),cord.end());
	set<pair<int,int> > was;
	vi toins;
	for(int i = 0; i < n; i++) {
		toins.push_back(cord[i].second);
		for(auto el : was) {
			if(el.first >= cord[i].first.second) {
				break;
			}
			graph[cord[i].second].push_back(el.second);
			graph[el.second].push_back(cord[i].second);
		}
		if(i != n-1 && cord[i+1].first.first > cord[i].first.first) {
			for(int el : toins) {
				was.insert({c[el],el});
			}
			toins.clear();
		}
	}
	if(n > 100)
	return 0;
	for(int i = 0; i < n; i++) {
		vector<int> dist (n,-1);
		queue<int> q;
		dist[i] = 0;
		q.push(i);
		ll sum = 0;
		while(!q.empty()) {
			int v = q.front();
			q.pop();
			sum+= dist[v];
			for(int u : graph[v]) {
				if(dist[u] == -1) {
					dist[u] = dist[v]+1;
					q.push(u);
				}
			}
		}
		cout << sum << "\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...