Submission #583270

# Submission time Handle Problem Language Result Execution time Memory
583270 2022-06-25T07:32:22 Z M_W Teleporters (IOI08_teleporters) C++17
90 / 100
1000 ms 48028 KB
#include <bits/stdc++.h>
#define ii pair<int, int>
using namespace std;
int pa[2000002], cnt[2000002]; // i * 2 = st, i * 2 + 1 = ed;
int in[1000001], out[1000001];
bool vis[2000002];
map<int, int> mp;

int findpa(int a){
	return pa[a] == a ? a : pa[a] = findpa(pa[a]);
}

void unset(int u, int v){
	cnt[findpa(v)] += cnt[findpa(u)];
	pa[findpa(u)] = findpa(v);
}

int main(){
	int N, M;
	vector<ii> v;
	scanf("%d %d", &N, &M);
	for(int i = 1; i <= N; i++){
		pa[i * 2] = i * 2; pa[i * 2 + 1] = i * 2 + 1;
		cnt[i * 2] = cnt[i * 2 + 1] = 1;
		scanf("%d %d", &in[i], &out[i]);
		v.push_back({in[i], i * 2});
		v.push_back({out[i], i * 2 + 1});
	}
	sort(v.begin(), v.end());
	for(int i = 0; i < v.size(); i++){
		if(vis[v[i].second]) continue;
		int cur = v[i].second;
		while(true){
			vis[cur] = true;
			
			int find = cur & 1 ? in[cur >> 1] : out[cur >> 1]; 
			auto it = upper_bound(v.begin(), v.end(), make_pair(find, INT_MAX));
			if(it == v.end() || vis[(*it).second]) break;
			
			unset((*it).second, cur);
			cur = (*it).second;
		}
	}
	
	int ans = cnt[v[0].second];
	
	priority_queue<int> pq;
	for(int i = 2; i <= (N * 2) + 1; i++){
		if(pa[i] != i || i == v[0].second) continue;
		pq.push(cnt[i]);
	}
	
	while(!pq.empty() && M > 0){
		ans += pq.top() + 2;
		pq.pop();
		M--;
	}
	ans += (M / 2 * 4) + (M % 2);
	printf("%d", ans);
}

Compilation message

teleporters.cpp: In function 'int main()':
teleporters.cpp:30:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |  for(int i = 0; i < v.size(); i++){
      |                 ~~^~~~~~~~~~
teleporters.cpp:21:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   21 |  scanf("%d %d", &N, &M);
      |  ~~~~~^~~~~~~~~~~~~~~~~
teleporters.cpp:25:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |   scanf("%d %d", &in[i], &out[i]);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 468 KB Output is correct
2 Correct 8 ms 884 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 468 KB Output is correct
2 Correct 8 ms 1084 KB Output is correct
3 Correct 17 ms 2000 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 9 ms 976 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 10 ms 1360 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 93 ms 5876 KB Output is correct
2 Correct 259 ms 14816 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 169 ms 9904 KB Output is correct
2 Correct 457 ms 19656 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 548 ms 29608 KB Output is correct
2 Correct 691 ms 35216 KB Output is correct
3 Correct 655 ms 41328 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 978 ms 39944 KB Output is correct
2 Execution timed out 1006 ms 43336 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1029 ms 48028 KB Time limit exceeded
2 Halted 0 ms 0 KB -