Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<cstdio>
- #include<vector>
- #include<cstdlib>
- #define min(a,b) a<b?a:b
- using namespace std;
- vector<pair<int,int> >V[10010];
- vector<pair<int,int> >poz[10010];
- int n,A[10010],B[10010],i,vizS[10010],vizJ[10010],nr,cost,a,b,c,d,COST,contor;
- void solve(int,int);
- int main()
- {
- freopen("biperm.in","r",stdin);
- freopen("biperm.out","w",stdout);
- scanf("%d",&n);
- for(i=1;i<=n;i++)scanf("%d",&A[i]);
- for(i=1;i<=n;i++)scanf("%d",&B[i]);
- vizS[0]=vizJ[0]=1;
- for(i=1;i<=n;i++)
- {
- V[A[i]].push_back(make_pair(B[i],i));
- V[B[i]].push_back(make_pair(A[i],-i));
- }
- nr=1;
- for(i=1;i<=n;i++)
- {
- if(!vizS[i])
- {
- contor=0;
- cost=0;
- nr*=2;
- a=V[i].front().first;
- b=V[i].front().second;
- if(b<0)
- {
- vector<pair<int,int> >::iterator it=V[i].begin()+1;
- c=it->first;
- d=it->second;
- if(d<0){cost+=1;solve(i,a);poz[abs(b)].push_back(make_pair(i,a));} else {solve(i,c);poz[abs(d)].push_back(make_pair(i,c));}
- } else {solve(i,a);poz[abs(b)].push_back(make_pair(i,a));}
- COST+=min(cost,contor-cost);
- }
- }
- cost=min(COST,n-COST);
- printf("%d %d\n",nr,cost);
- for(i=1;i<=n;i++)
- {
- if(!poz[i].size())continue;
- a=poz[i].front().first;
- printf("%d ",a);
- }
- printf("\n");
- for(i=1;i<=n;i++)
- {
- if(!poz[i].size())continue;
- a=poz[i].front().second;
- printf("%d ",a);
- }
- return 0;
- }
- void solve(int X,int Y)
- {
- int a,b,c,d;
- vizS[X]=1;vizJ[Y]=1;
- contor++;
- vector<pair<int,int> >::iterator it=V[Y].begin();
- a=it->first;b=it->second;
- if(a==X)a=0;
- it++;
- c=it->first;d=it->second;
- if(c==X&&a!=0)c=0;
- if(vizS[Y])
- {
- if(vizS[a])
- {
- if(!vizS[c])
- {
- cost+=d>0?1:0;
- poz[abs(d)].push_back(make_pair(c,Y));
- solve(c,Y);
- }
- } else
- {
- cost+=b>0?1:0;
- poz[abs(b)].push_back(make_pair(a,Y));
- solve(a,Y);
- }
- }
- if(!vizS[Y])
- {
- if(vizJ[a])
- {
- if(!vizJ[c])
- {
- cost+=d>0?0:1;
- poz[abs(d)].push_back(make_pair(Y,c));
- solve(Y,c);
- }
- }else
- {
- cost+=b>0?0:1;
- poz[abs(b)].push_back(make_pair(Y,a));
- solve(Y,a);
- }
- }
- }
- //TIA!!!!!!!!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement