Submission #283180

#TimeUsernameProblemLanguageResultExecution timeMemory
283180MohamedAhmed04Ancient Books (IOI17_books)C++14
0 / 100
1 ms384 KiB
#include <bits/stdc++.h>
#include "books.h"
//#include "grader.cpp"

using namespace std ;

const int MAX = 1e6 + 10 ;

int n ;

int to[MAX] ;
int vis[MAX] ;
long long cost[MAX] ;

long long dfs(int node)
{
	if(vis[node])
		return 0ll ;
	vis[node] = 1 ;
	return (dfs(to[node]) + abs(to[node] - node)) ;
}

long long minimum_walk(std::vector<int> p, int s) 
{
	n = p.size() ;
	for(int i = 0 ; i < n ; ++i)
		to[i] = p[i] ;
	for(int i = 0 ; i < n ; ++i)
	{
		if(vis[i])
			continue ;
		cost[i] = dfs(i) ;
	}
	long long ans = 0 ;
	for(int i = 0 ; i < n ; ++i)
		ans += cost[i] ;
	for(int i = n-1 ; i >= 0 ; --i)
	{
		if(cost[i])
			ans += i * 2ll ;
	}
	return ans ;
}
#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...