제출 #1253380

#제출 시각아이디문제언어결과실행 시간메모리
1253380aren_dance고대 책들 (IOI17_books)C++20
0 / 100
26 ms47432 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(); vector<int> k(n); for(int i=0;i<n;++i){ g[p[i]].push_back(i); g_rev[i].push_back(p[i]); k[p[i]]=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; long long h=0ll; for(auto i:order){ if(!vis[i]){ dfs2(i,comp); ++comp; } } for(int i=0;i<n;++i){ vis[i]=0; } for(int i=0;i<n;++i){ if(!vis[id[i]]){ h=i; vis[id[i]]=1; } } long long answ=2*h; vector<vector<int>> r(comp); for(int i=0;i<n;++i){ answ+=abs(i-k[i]); } 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...