Submission #1002843

#TimeUsernameProblemLanguageResultExecution timeMemory
1002843TobTeleporters (IOI08_teleporters)C++14
100 / 100
337 ms62128 KiB
#include <bits/stdc++.h>

#define F first
#define S second
#define all(x) x.begin(), x.end()
#define pb push_back

using namespace std;

typedef long long ll;
typedef pair <ll, ll> pii;

const int N = 2e6 + 7;

int res, cur;
int co[N], nxt[N], succ[N], bio[N];
vector <int> cyc;

void dfs(int x) {
	if (x == 0) {
		res = cur;
		return;
	}
	if (!bio[x]) cur++;
	if (bio[x]) {
		cyc.pb(cur);
		return;
	}
	bio[x] = 1;
	dfs(succ[x]);
}

int main () {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n, m;
	
	cin >> n >> m;
	
	vector <int> v;
	
	for (int i = 0; i < n; i++) {
		int a, b; cin >> a >> b; a++; b++;
		v.pb(a);
		v.pb(b);
		co[a] = b;
		co[b] = a;
	}
	
	sort(all(v));
	v.pb(0);
	
	for (int i = 0; i < 2*n; i++) nxt[v[i]] = v[i+1];
	
	for (int i = 0; i < 2*n; i++) {
		int x = v[i];
		succ[x] = nxt[co[x]];
	}
	
	for (int i = 0; i < 2*n; i++) {
		int x = v[i];
		if (!bio[x]) {
			cur = 0;
			dfs(x);
		}
	}
	
	sort(all(cyc), [](int x, int y){return x > y;});
	
	for (int i = 0; m && i < cyc.size(); i++, m--) {
		res += cyc[i] + 2;
	}
	
	res += m/2*4 + m%2;
	
	cout << res;
	
	return 0;
}

Compilation message (stderr)

teleporters.cpp: In function 'int main()':
teleporters.cpp:71:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   71 |  for (int i = 0; m && i < cyc.size(); i++, m--) {
      |                       ~~^~~~~~~~~~~~
#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...