From 47b49289666860941801378e0fd73a029924cc12 Mon Sep 17 00:00:00 2001 From: Zengtudor Date: Tue, 21 Oct 2025 15:11:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(P7299):=20=E4=BF=AE=E6=AD=A3=E7=89=9B?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=E4=BA=A4=E6=8D=A2=E9=80=BB=E8=BE=91=E5=92=8C?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E8=AE=A1=E7=AE=97=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复牛位置交换时的gotopos更新逻辑,将结果存储从vector改为vector>以正确计算最终位置集合大小 --- src/10/21/P7299.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) 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<