F - Free Figurines UVALive - 7752

xiaoxiao2021-02-28  109

套娃这个题,其实只要统计他需要打开几次,还有要合上几次就好,一开始做一个标记,记录下每一个套娃的父亲,然后,比不同,把要发生变化的位置的套娃都拆开,就可以了,最后统计一下需要合上的,最后在统计一下,想要的和改变后的区别,想要的有的,改变后没有的就是需要再加上的。

#include <iostream> #include <cmath> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; const int maxn = 100000 + 10; int a[maxn],b[maxn],fa[maxn],ce[maxn]; int n; int ans; void dfs2(int x) { if(fa[x] == 0) return; ans++; dfs2(fa[x]); fa[x] = 0; return; } int main() { while(scanf("%d",&n) != EOF) { ans = 0; memset(ce,-1,sizeof(ce)); memset(fa,0,sizeof(fa)); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); for(int i = 1; i <= n; i++) { scanf("%d",&a[i]); fa[i] = a[i]; if(!fa[i]) ce[i] = 0; } for(int i = 1; i <= n; i++) { scanf("%d",&b[i]); } for(int i = 1; i <= n; i++) { if(a[i] != b[i]) { dfs2(a[i]); dfs2(b[i]); dfs2(i); } } for(int i = 1; i <= n; i++) { if(b[i] != fa[i] && b[i] > 0) ans++; } printf("%d\n",ans); } return 0; }

转载请注明原文地址: https://www.6miu.com/read-64393.html

最新回复(0)