CodeForces 760CPavel and barbecue

来源:互联网 发布:c语言编译器哪个好 编辑:程序博客网 时间:2024/04/28 12:20

http://codeforces.com/problemset/problem/760/C




题意看上去很复杂,整理出来就是给出一张有向图,并且起点和终点都是1-n里的数字且不重复,每次操作可以将一个数字换成另一个数字,求操作几次可以满足该图是完全图,因为起点的数字不会出现2次以上,终点也是如此,所以只要看这张图有几个环就可以了,并且这些环是不会相切的,环的个数是1则不用操作,如果大于1则多少个环就需要操作多少次。



#include<bits/stdc++.h>using namespace std;int ans;int ans1;int ma[222222];bool vis[222222];void dfs(int x){if(vis[ma[x]]==1){ans1++;}else {vis[ma[x]]=1;dfs(ma[x]);}}int main(){int n,m,k;while(scanf("%d",&n)!=EOF){ans=0;ans1=0;   memset(ma,0,sizeof(ma));   memset(vis,0,sizeof(vis));   int _0=0;   int i;   int a;   for(i=1;i<=n;i++)   {   cin>>a;   ma[i]=a;   }   for(i=1;i<=n;i++)   {   cin>>a;   if(a==1)_0++;   }   if(_0%2==0)ans++;   for(i=1;i<=n;i++)   {   if(vis[i]==0)   {   vis[i]=1;   dfs(i);   }   }   if(ans1>1)   ans+=ans1;   else ans+=ans1-1; cout<<ans<<endl;}return 0;}


原创粉丝点击