首页 > 代码库 > codeforces 756A
codeforces 756A
Input
4
4 3 2 1
0 1 1 1
Output
2
4个饼 每一秒 都会到对应 上面一行的位置
0的话不翻转 1 翻转
要求 每个饼要到所有的位置
而且正反面都要到过所有的位置
我是思路是并查集 先看看有多少个换
显然是要和到一起的
然后1的个数如果是偶数的话就有问题 最少改变多少个数
#include<stdio.h> #include<algorithm> #include<string.h> #include<string> #include<math.h> using namespace std; #define MAXN 200010 int z[MAXN]; int x[MAXN]; int find1(int a) { if(a==z[a]) return a; else { int b=find1(z[a]); return z[a]=b; } } int c[5]; int main () { int n; scanf("%d",&n); for(int i=1;i<=n;i++) z[i]=i; for(int i=1;i<=n;i++) { int a,b,fa,fb; scanf("%d",&a); fa=find1(i); fb=find1(a); if(fa!=fb) z[fa]=z[fb]; } for(int i=1;i<=n;i++) { int a; scanf("%d",&a); c[a]++; } int ans1=0; for(int i=1;i<=n;i++) { x[i]=find1(i); if(i==x[i]) { ans1++; } } if(ans1==1) ans1--; if(c[1]%2==0) ans1++; printf("%d\n",ans1); return 0; }
codeforces 756A
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。