From f663a7e2708a2875c29fa757061f4ffbe0daaa01 Mon Sep 17 00:00:00 2001 From: Zengtudor Date: Tue, 21 Oct 2025 14:22:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0P7299.cpp=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E5=A5=B6=E7=89=9B=E4=BD=8D=E7=BD=AE=E4=BA=A4=E6=8D=A2?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 实现奶牛位置交换问题的解决方案,包括位置跟踪和并查集操作来计算最终位置。通过输入处理、位置交换记录和结果计算,输出每头奶牛的最终位置访问次数。 --- src/10/21/P7299.cpp | 57 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/10/21/P7299.cpp diff --git a/src/10/21/P7299.cpp b/src/10/21/P7299.cpp new file mode 100644 index 0000000..57926d3 --- /dev/null +++ b/src/10/21/P7299.cpp @@ -0,0 +1,57 @@ +#include +#include +#include +#include +#include +#include +using ll = int64_t; + +std::vector> gotopos; +std::vector endpos; +ll n,k; +std::vector poscow,nposcow; +std::vector> vispos; +std::vector bcj,ans; +static inline ll find(ll idx){ + if(idx==bcj[idx])return idx; + return bcj[idx]=find(bcj[idx]); +} +static inline void merge(ll a,ll b){ + bcj[find(a)]=find(b); +} + +int main(){ + std::iostream::sync_with_stdio(false); + std::cin.tie(nullptr); + + std::cin>>n>>k; + + poscow.resize(n+1); + vispos.resize(n+1); + bcj.resize(n+1); + for(ll i=1;i<=n;i++)bcj[i]=i; + ans.resize(n+1); + + for(ll i=1;i<=n;i++)poscow[i]=i; + for(ll i=1;i<=k;i++){ + ll a,b; + std::cin>>a>>b; + 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]); + } + for(ll i=1;i<=n;i++){ + ans[find(i)]+=1+gotopos[i].size(); + } + for(ll i=1;i<=n;i++){ + std::cout<