mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-10-26 10:02:47 +00:00
feat: 添加P7299.cpp解决奶牛位置交换问题
实现奶牛位置交换问题的解决方案,包括位置跟踪和并查集操作来计算最终位置。通过输入处理、位置交换记录和结果计算,输出每头奶牛的最终位置访问次数。
This commit is contained in:
parent
65e1874d65
commit
f663a7e270
57
src/10/21/P7299.cpp
Normal file
57
src/10/21/P7299.cpp
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#include <cstdint>
|
||||||
|
#include <iostream>
|
||||||
|
#include <istream>
|
||||||
|
#include <set>
|
||||||
|
#include <utility>
|
||||||
|
#include <vector>
|
||||||
|
using ll = int64_t;
|
||||||
|
|
||||||
|
std::vector<std::set<ll>> gotopos;
|
||||||
|
std::vector<ll> endpos;
|
||||||
|
ll n,k;
|
||||||
|
std::vector<ll> poscow,nposcow;
|
||||||
|
std::vector<std::set<ll>> vispos;
|
||||||
|
std::vector<ll> 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<<ans[i]<<"\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user