提交时间:2024-11-05 19:09:01
运行 ID: 34302
#include<bits/stdc++.h> using namespace std; int n,a[300005],b[300005]; // map<vector<int>,bool>vis; // int bfs(){ // queue<pair<vector<int>,pair<int,int>>>q; // vector<int>v(a+1,a+1+n),v1(b+1,b+1+n); // int p=0; // for(int i:v)p^=i; // q.push({v,{0,p}}); // while(q.size()){ // auto now=q.front().first; // auto now1=q.front().second.first; // auto lst=q.front().second.second; // q.pop(); // if(vis[now])continue; // vis[now]=1; // for(int i=1;i<=n;i++){ // auto nxt=now; // int lst1=nxt[i-1]; // nxt[i-1]=lst; // if(nxt==v1)return now1+1; // q.push({nxt,{now1+1,lst1}}); // } // } // return 1; // } // void slv1(){ // cout<<bfs(); // } // int q[100005]; // void slv2(){ // int lst=0; // for(int i=1;i<=n;i++){ // lst^=b[i]; // q[b[i]]=i; // } // int ans=0; // if(lst){ // for(int i=1;i<=n;i++){ // if(!b[i]){ // b[i]=lst; // ans++; // break; // } // } // } // for(int i=1;i<=n;i++){ // if(b[i]!=i){ // swap(b[i],b[q[i]]); // ans++; // } // } // cout<<ans<<endl; // } map<int,vector<int>>posa,posb,e; bool mns=0; map<int,bool>vis; void dfs(int p){ vis[p]=1; for(int x:e[p]){ // cout<<p<<" "<<x<<endl; if(!vis[x])dfs(x); } } int id[300005],mn; void slv(){ cin>>n; bool p=1; int lst=0; for(int i=1;i<=n;i++){ cin>>a[i]; lst^=a[i]; // if(a[i]!=i)p=0; } for(int i=1;i<=n;i++)cin>>b[i]; for(int i=1;i<=n;i++){ if(a[i]!=b[i])id[++mn]=i; } for(int i=1;i<=mn;i++){ a[i]=a[id[i]]; b[i]=b[id[i]]; } for(int i=1;i<=mn;i++) posa[a[i]].push_back(i),posb[b[i]].push_back(i); for(auto it=posa.begin();it!=posa.end();it++){ for(auto x:posb[it->first]) e[it->first].push_back(a[x]); if(it->second.size()!=posb[it->first].size()){ mns=1; for(auto x:posb[lst]) e[it->first].push_back(a[x]); } } if(posb[lst].size())mns=1; // cout<<mns<<endl; int ans=0; for(int i=1;i<=mn;i++){ if(!vis[a[i]]&&a[i]!=b[i])dfs(a[i]),ans++; if(a[i]!=b[i])ans++; } // cout<<ans<<endl; ans-=mns; cout<<ans; // if(n<=10)slv1(); // else if(p)slv2(); } int main(){ slv(); return 0; }