제출 #641470

#제출 시각아이디문제언어결과실행 시간메모리
641470ggohAncient Books (IOI17_books)C++14
50 / 100
285 ms89140 KiB
#include "books.h" #include<bits/stdc++.h> using namespace std; #define sz(v) ((int)(v).size()) typedef long long lint; int n,sz; int v[1000002]; int d[1000002]; vector<int>go; vector<int>cycle[1000002]; lint cost[1000002]; void dfs(int p,int par) { cycle[sz].push_back(p); cost[sz]+=abs(par-p); v[p]=1; if(!v[go[p]])dfs(go[p],p); else cost[sz]+=abs(go[p]-p); } lint minimum_walk(vector<int> p, int s) { n=sz(p); go=p; for(int i=0;i<n;i++) { if(!v[i]) { sz++; dfs(i,i); } } vector<int>X; lint ans=0; int maxi=-1; for(int i=1;i<=sz;i++) { ans+=cost[i]; sort(cycle[i].begin(),cycle[i].end()); d[cycle[i][0]]++; d[cycle[i][sz(cycle[i])-1]]--; if(sz(cycle[i])>1)maxi=max(maxi,cycle[i][sz(cycle[i])-1]-1); } int c=0; for(int i=0;i<=maxi;i++) { c+=d[i]; if(c==0)ans+=2; } 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...