Submission #1199519

#TimeUsernameProblemLanguageResultExecution timeMemory
1199519Aviansh고대 책들 (IOI17_books)C++20
0 / 100
0 ms328 KiB
#include "books.h" #include <bits/stdc++.h> using namespace std; struct dsu{ vector<int>root; vector<int>siz; dsu(int n){ root=vector<int>(n); iota(root.begin(),root.end(),0); siz=vector<int>(n,1); } bool unite(int x, int y){ x=findRoot(x); y=findRoot(y); if(x==y) return 0; if(siz[x]<siz[y]){ swap(x,y); } siz[x]+=siz[y]; root[y]=x; return 1; } int findRoot(int x){ if(x==root[x]) return x; return root[x]=findRoot(root[x]); } }; long long minimum_walk(vector<int> p, int s) { long long ans = 0; int n = p.size(); dsu ds(n); for(int i = 0;i<n;i++){ ans+=abs(i-p[i]); ds.unite(i,p[i]); } assert(s==0); int mx = 0; for(int i = 0;i<n;i++){ if(i!=p[i]){ if(ds.unite(0,i)){ mx=i; } } } ans+=mx*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...