您的位置:首页 > 其它

F - Free Figurines UVALive - 7752

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

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: