Submission #58259

#TimeUsernameProblemLanguageResultExecution timeMemory
58259memikakizakiTeleporters (IOI08_teleporters)C++14
70 / 100
839 ms66560 KiB
#include <bits/stdc++.h>
#define long long long
using namespace std;
const int N = 1e6+10, INF = 1e9;

int n, m, lf[N], rg[N], vals[2*N], rev[2*N], nxt[2*N];
vector<int> cycles;
bitset<N<<1> mark;
long ans;
int main() {
	scanf("%d %d", &n, &m);
	for(int i = 0; i < n; i++) {
		scanf("%d %d", &lf[i], &rg[i]);
		vals[i<<1] = lf[i];
		vals[i<<1|1] = rg[i];
	}
	vals[2*n] = 2e6+2;
	sort(vals, vals+2*n);
	for(int i = 0; i <= n << 1; i++) rev[vals[i]] = i;
	for(int i = 0; i < n; i++) {
		nxt[rev[lf[i]]] = rev[rg[i]]+1;
		nxt[rev[rg[i]]] = rev[lf[i]]+1;
	}
	nxt[2*n] = INF;
	for(int i = 0; i <= n << 1; i++) if(!mark[i]) {
		int curr = i, sz = 0;
		bool cycle = false;
		while(curr != INF) {
			if(mark[curr]) {
				cycle = true;
				break;
			}
			++sz;
			mark[curr] = true;
			curr = nxt[curr];
		}
		if(cycle) cycles.push_back(sz);
		else ans = sz-1;
	}
	sort(cycles.begin(), cycles.end(), greater<int>());
	for(int i = 0; i < min((int) cycles.size(), m); i++) ans += cycles[i] + 2;
	if(m > cycles.size()) {
		m -= cycles.size();
		ans += (m - (m & 1)) << 1 + (m & 1);
	}
	printf("%lld", ans);
}

Compilation message (stderr)

teleporters.cpp: In function 'int main()':
teleporters.cpp:42:7: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if(m > cycles.size()) {
     ~~^~~~~~~~~~~~~~~
teleporters.cpp:44:29: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   ans += (m - (m & 1)) << 1 + (m & 1);
                           ~~^~~~~~~~~
teleporters.cpp:11:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &m);
  ~~~~~^~~~~~~~~~~~~~~~~
teleporters.cpp:13:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d", &lf[i], &rg[i]);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...