Submission #1253368

#TimeUsernameProblemLanguageResultExecution timeMemory
1253368aren_danceAncient Books (IOI17_books)C++20
0 / 100
26 ms47428 KiB
#include <bits/stdc++.h>
#include "books.h"
using namespace std;
const int N=1e6+1;
vector<int> order;
vector<int> g[N];
vector<int> g_rev[N];
bool vis[N];
int id[N];
void dfs1(int node){
    vis[node]=1;
    for(auto i:g[node]){
        if(!vis[i])
        dfs1(i);
    }
    order.push_back(node);
}
void dfs2(int node,int comp){
    id[node]=comp;
    vis[node]=1;
    for(auto i:g_rev[node]){
        if(!vis[i])
        dfs2(i,comp);
    }
}
long long minimum_walk(std::vector<int> p, int s) {
	int n=p.size();
	for(int i=0;i<n;++i){
	    g[p[i]].push_back(i);
	    g_rev[i].push_back(p[i]);
	}
	for(int i=0;i<n;++i){
	    if(!vis[i])
	    dfs1(i);
	}
	for(int i=0;i<n;++i){
	    vis[i]=0;
	}
	reverse(order.begin(),order.end());
	int comp=0;
	for(auto i:order){
	    if(!vis[i]){
	        dfs2(i,comp);
	        ++comp;
	    }
	}
	long long answ=0ll;
	for(int i=1;i<=n;++i){
	    answ+=abs(i-p[i]);
	}
	if(comp==4){
	    return 0;
	}
	return answ;
}
#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...