mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-10-26 10:02:47 +00:00
fix(P7299): 修正牛位置交换逻辑和结果计算方式
修复牛位置交换时的gotopos更新逻辑,将结果存储从vector<ll>改为vector<set<ll>>以正确计算最终位置集合大小
This commit is contained in:
parent
f663a7e270
commit
47b4928966
@ -1,4 +1,5 @@
|
|||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
#include <cstdio>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <istream>
|
#include <istream>
|
||||||
#include <set>
|
#include <set>
|
||||||
@ -11,7 +12,8 @@ std::vector<ll> endpos;
|
|||||||
ll n,k;
|
ll n,k;
|
||||||
std::vector<ll> poscow,nposcow;
|
std::vector<ll> poscow,nposcow;
|
||||||
std::vector<std::set<ll>> vispos;
|
std::vector<std::set<ll>> vispos;
|
||||||
std::vector<ll> bcj,ans;
|
std::vector<ll> bcj;
|
||||||
|
std::vector<std::set<ll>> ans;
|
||||||
static inline ll find(ll idx){
|
static inline ll find(ll idx){
|
||||||
if(idx==bcj[idx])return idx;
|
if(idx==bcj[idx])return idx;
|
||||||
return bcj[idx]=find(bcj[idx]);
|
return bcj[idx]=find(bcj[idx]);
|
||||||
@ -27,7 +29,9 @@ int main(){
|
|||||||
std::cin>>n>>k;
|
std::cin>>n>>k;
|
||||||
|
|
||||||
poscow.resize(n+1);
|
poscow.resize(n+1);
|
||||||
|
gotopos.resize(n+1);
|
||||||
vispos.resize(n+1);
|
vispos.resize(n+1);
|
||||||
|
endpos.resize(n+1);
|
||||||
bcj.resize(n+1);
|
bcj.resize(n+1);
|
||||||
for(ll i=1;i<=n;i++)bcj[i]=i;
|
for(ll i=1;i<=n;i++)bcj[i]=i;
|
||||||
ans.resize(n+1);
|
ans.resize(n+1);
|
||||||
@ -36,22 +40,23 @@ int main(){
|
|||||||
for(ll i=1;i<=k;i++){
|
for(ll i=1;i<=k;i++){
|
||||||
ll a,b;
|
ll a,b;
|
||||||
std::cin>>a>>b;
|
std::cin>>a>>b;
|
||||||
|
gotopos[poscow[a]].emplace(b);
|
||||||
|
gotopos[poscow[b]].emplace(a);
|
||||||
std::swap(poscow[a],poscow[b]);
|
std::swap(poscow[a],poscow[b]);
|
||||||
gotopos[poscow[a]].emplace(a);
|
|
||||||
gotopos[poscow[b]].emplace(b);
|
|
||||||
}
|
}
|
||||||
for(ll i=1;i<=n;i++){
|
for(ll i=1;i<=n;i++){
|
||||||
endpos[poscow[i]]=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++)poscow[i]=i;
|
||||||
for(ll i=1;i<=n;i++){
|
for(ll i=1;i<=n;i++){
|
||||||
merge(i, endpos[i]);
|
merge(i, endpos[i]);
|
||||||
|
if(gotopos[i].size())gotopos[i].erase(gotopos[i].find(endpos[i]));
|
||||||
}
|
}
|
||||||
for(ll i=1;i<=n;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++){
|
for(ll i=1;i<=n;i++){
|
||||||
std::cout<<ans[i]<<"\n";
|
std::cout<<ans[find(i)].size()<<"\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user