제출 #1222680

#제출 시각아이디문제언어결과실행 시간메모리
1222680thangdz2k7Teleporters (IOI08_teleporters)C++20
20 / 100
351 ms47408 KiB
#include <bits/stdc++.h>

using namespace std;

const int MAX = 2e6 + 1;

void process(){
	int n, m; cin >> n >> m;
	vector <int> w(n), e(n), ord;

	for (int i = 0; i < n; ++ i){
		cin >> w[i] >> e[i];
		ord.push_back(w[i]);
		ord.push_back(e[i]);
	}
	sort(ord.begin(), ord.end());

	vector <int> l(MAX, 0);
	for (int i = 1; i < n * 2; ++ i) 
		l[ord[i]] = ord[i - 1];

	vector <int> root(MAX), siz(MAX, 1);
	iota(root.begin(), root.end(), 0);

	function <int(int)> Find = [&](int u) {
		if (u == root[u]) return u;
		return root[u] = Find(root[u]);
	};

	auto joint = [&](int u, int v) -> void {
		u = Find(u), v = Find(v);
		if (u < v) swap(u, v);
		root[u] = v;
		siz[v] += siz[u];
	};

	for (int i = 0; i < n; ++ i)
		joint(l[w[i]], e[i]);

	vector <int> tmp;
	for (int x : ord) if (x == Find(x)) tmp.push_back(x);

	sort(tmp.begin(), tmp.end(), [&](int u, int v){
		return siz[u] < siz[v];
	});

	int ans = siz[0];
	int flag = 1;

	while (m --){
		if (tmp.size()){
			ans += siz[tmp.back()] + 2;
			tmp.pop_back();
			continue;
		}
		ans += flag;
		flag ^= 2;
	}

	cout << ans - 1;
}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	process();
	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...
#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...
#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...