Submission #95139

#TimeUsernameProblemLanguageResultExecution timeMemory
95139Retro3014Teleporters (IOI08_teleporters)C++17
100 / 100
532 ms29156 KiB
#include <iostream>
#include <algorithm>
#include <vector>
#include <stdio.h>

#define MAX_X 2000000
using namespace std;
typedef long long ll;
int N, M;
int r[MAX_X+1];
bool vst[MAX_X+1];

vector<int> cycle;
int ans;

void dfs(int x, ll y){
	while(1){
		if(vst[x]){
			cycle.push_back(y);
			return;
		}
		vst[x] = true;
		if(x==MAX_X){
			ans+=y;
			return;
		}
		if(r[x]!=x+1)	y++;
		x = r[x];
	}
}

int main(){
	scanf("%d%d", &N, &M);
	for(int i=0; i<MAX_X; i++)	r[i] = i+1;
	for(int i=0; i<N; i++){
		int a, b; scanf("%d%d", &a, &b);
		r[a-1] = b; r[b-1] = a;
	}
	for(int i=0; i<MAX_X; i++){
		if(vst[i])	continue;
		dfs(i, 0);
	}
	sort(cycle.begin(), cycle.end());
	while(M--){
		if(cycle.empty()){
			cycle.push_back(1);
			ans++;
		}else{
			ans+=2+cycle.back();
			cycle.pop_back();
		}
	}
	printf("%d", ans);
	return 0;
}

Compilation message (stderr)

teleporters.cpp: In function 'int main()':
teleporters.cpp:33: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:36:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   int a, b; scanf("%d%d", &a, &b);
             ~~~~~^~~~~~~~~~~~~~~~
#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...