diff --git a/src/10/21/P7299.cpp b/src/10/21/P7299.cpp index 57926d3..0fee80b 100644 --- a/src/10/21/P7299.cpp +++ b/src/10/21/P7299.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -11,7 +12,8 @@ std::vector endpos; ll n,k; std::vector poscow,nposcow; std::vector> vispos; -std::vector bcj,ans; +std::vector bcj; +std::vector> ans; static inline ll find(ll idx){ if(idx==bcj[idx])return idx; return bcj[idx]=find(bcj[idx]); @@ -27,7 +29,9 @@ int main(){ std::cin>>n>>k; poscow.resize(n+1); + gotopos.resize(n+1); vispos.resize(n+1); + endpos.resize(n+1); bcj.resize(n+1); for(ll i=1;i<=n;i++)bcj[i]=i; ans.resize(n+1); @@ -36,22 +40,23 @@ int main(){ for(ll i=1;i<=k;i++){ ll a,b; std::cin>>a>>b; + gotopos[poscow[a]].emplace(b); + gotopos[poscow[b]].emplace(a); std::swap(poscow[a],poscow[b]); - gotopos[poscow[a]].emplace(a); - gotopos[poscow[b]].emplace(b); } for(ll i=1;i<=n;i++){ endpos[poscow[i]]=i; - gotopos[i].erase(gotopos[i].find(endpos[i])); } for(ll i=1;i<=n;i++)poscow[i]=i; for(ll i=1;i<=n;i++){ merge(i, endpos[i]); + if(gotopos[i].size())gotopos[i].erase(gotopos[i].find(endpos[i])); } for(ll i=1;i<=n;i++){ - ans[find(i)]+=1+gotopos[i].size(); + ans[find(i)].emplace(i); + ans[find(i)].insert(gotopos[i].cbegin(),gotopos[i].cend()); } for(ll i=1;i<=n;i++){ - std::cout<