F. Economic Difficulties

An electrical grid in Berland palaces consists of 2 grids: main and reserve. Wires in palaces are made of expensive material, so selling some of them would be a good idea!

Each grid (main and reserve) has a head node (its number is 1). Every other node gets electricity from the head node. Each node can be reached from the head node by a unique path. Also, both grids have exactly n nodes, which do not spread electricity further.

In other words, every grid is a rooted directed tree on n leaves with a root in the node, which number is 1. Each tree has independent enumeration and nodes from one grid are not connected with nodes of another grid.

Also, the palace has n electrical devices. Each device is connected with one node of the main grid and with one node of the reserve grid. Devices connect only with nodes, from which electricity is not spread further (these nodes are the tree's leaves). Each grid's leaf is connected with exactly one device.

In this example the main grid contains 6 nodes (the top tree) and the reserve grid contains 4 nodes (the lower tree). There are 3 devices with numbers colored in blue.

It is guaranteed that the whole grid (two grids and n devices) can be shown in this way (like in the picture above):

main grid is a top tree, whose wires are directed 'from the top to the down',

reserve grid is a lower tree, whose wires are directed 'from the down to the top',

devices — horizontal row between two grids, which are numbered from 1 to n from the left to the right,

wires between nodes do not intersect.

Formally, for each tree exists a depth-first search from the node with number 1, that visits leaves in order of connection to devices 1,2,…,n (firstly, the node, that is connected to the device 1, then the node, that is connected to the device 2, etc.).

Businessman wants to sell (remove) maximal amount of wires so that each device will be powered from at least one grid (main or reserve). In other words, for each device should exist at least one path to the head node (in the main grid or the reserve grid), which contains only nodes from one grid.

Input

The first line contains an integer n (1≤n≤1000) — the number of devices in the palace.

The next line contains an integer a (1+n≤a≤1000+n) — the amount of nodes in the main grid.

Next line contains a−1 integers pi (1≤pi≤a). Each integer pi means that the main grid contains a wire from pi-th node to (i+1)-th.

The next line contains n integers xi (1≤xi≤a) — the number of a node in the main grid that is connected to the i-th device.

The next line contains an integer b (1+n≤b≤1000+n) — the amount of nodes in the reserve grid.

Next line contains b−1 integers qi (1≤qi≤b). Each integer qi means that the reserve grid contains a wire from qi-th node to (i+1)-th.

The next line contains n integers yi (1≤yi≤b) — the number of a node in the reserve grid that is connected to the i-th device.

It is guaranteed that each grid is a tree, which has exactly n leaves and each leaf is connected with one device. Also, it is guaranteed, that for each tree exists a depth-first search from the node 1, that visits leaves in order of connection to devices.

Output

Print a single integer — the maximal amount of wires that can be cut so that each device is powered.

Examples

input

3

6

4 1 1 4 2

6 5 3

4

1 1 1

3 4 2

output

5

input

4

6

4 4 1 1 1

3 2 6 5

6

6 6 1 1 1

5 4 3 2

output

6

input

5

14

1 1 11 2 14 14 13 7 12 2 5 6 1

9 8 3 10 4

16

1 1 9 9 2 5 10 1 14 3 7 11 6 12 2

8 16 13 4 15

output

17

Note

For the first example, the picture below shows one of the possible solutions (wires that can be removed are marked in red):

The second and the third examples can be seen below:

题意

给你两棵树,每棵树都恰好有n个叶子,每个叶子都连着一个电机。

让你删除最多的边,使得每个电机都至少能够存在一条路径到某棵树的根。

note很清楚

题解

视频题解 https://www.bilibili.com/video/av77514280/

对于每棵树,维护l[i][j]表示我删掉这个子树的所有边之后,[i,j]这个范围的电机不保证能够全部连上我的根。

用一个dp[i]表示[1,i]区间内,全都能连上根最多能删除多少条边,那么转移就是dp[i]=max(dp[i],dp[j-1]+max(l[j][i]));这样转移。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2005;
vector<int>G[2][maxn];
int dp[maxn],val[2][maxn][maxn],l[2][maxn],r[2][maxn],sz[2][maxn];
int n,a;
void dfs(int _,int x){
if(x!=1)sz[_][x]=1;
for(int i=0;i<G[_][x].size();i++){
int v = G[_][x][i];
dfs(_,v);
l[_][x]=min(l[_][x],l[_][v]);
r[_][x]=max(r[_][x],r[_][v]);
sz[_][x]+=sz[_][v];
}
val[_][l[_][x]][r[_][x]]=max(val[_][l[_][x]][r[_][x]],sz[_][x]);
}
int main(){
cin>>n;
for(int _=0;_<2;_++){
cin>>a;
for(int i=1;i<=a;i++){
l[_][i]=a+1;
r[_][i]=0;
}
for(int i=2;i<=a;i++){
int x;cin>>x;
G[_][x].push_back(i);
}
for(int i=1;i<=n;i++){
int x;cin>>x;
l[_][x]=r[_][x]=i;
}
dfs(_,1);
}
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
dp[j]=max(dp[j],dp[i-1]+max(val[0][i][j],val[1][i][j]));
}
}
cout<<dp[n]<<endl;
}

Codeforces Round #603 (Div. 2) F. Economic Difficulties dp的更多相关文章

  1. Codeforces Round #603 (Div. 2)F. Economic Difficulties

    F. Economic Difficulties 题目链接: https://codeforces.com/contest/1263/problem/F 题目大意: 两棵树,都有n个叶子节点,一棵树正 ...

  2. Codeforces Round #471 (Div. 2) F. Heaps(dp)

    题意 给定一棵以 \(1\) 号点为根的树.若满足以下条件,则认为节点 \(p\) 处有一个 \(k\) 叉高度为 \(m\) 的堆: 若 \(m = 1\) ,则 \(p\) 本身就是一个 \(k\ ...

  3. Codeforces Round #527 (Div. 3)F(DFS,DP)

    #include<bits/stdc++.h>using namespace std;const int N=200005;int n,A[N];long long Mx,tot,S[N] ...

  4. Codeforces Round #479 (Div. 3) F. Consecutive Subsequence (DP)

    题意:给你一个长度为\(n\)的序列,求一个最长的\({x,x+1,x+2,.....,x+k-1}\)的序列,输出它的长度以及每个数在原序列的位置. 题解:因为这题有个限定条件,最长序列是公差为\( ...

  5. Codeforces Round #485 (Div. 2) F. AND Graph

    Codeforces Round #485 (Div. 2) F. AND Graph 题目连接: http://codeforces.com/contest/987/problem/F Descri ...

  6. Codeforces Round #486 (Div. 3) F. Rain and Umbrellas

    Codeforces Round #486 (Div. 3) F. Rain and Umbrellas 题目连接: http://codeforces.com/group/T0ITBvoeEx/co ...

  7. Codeforces Round #501 (Div. 3) F. Bracket Substring

    题目链接 Codeforces Round #501 (Div. 3) F. Bracket Substring 题解 官方题解 http://codeforces.com/blog/entry/60 ...

  8. Codeforces Round #499 (Div. 1) F. Tree

    Codeforces Round #499 (Div. 1) F. Tree 题目链接 \(\rm CodeForces\):https://codeforces.com/contest/1010/p ...

  9. Codeforces Round #603 (Div. 2) A. Sweet Problem(水.......没做出来)+C题

    Codeforces Round #603 (Div. 2) A. Sweet Problem A. Sweet Problem time limit per test 1 second memory ...

随机推荐

  1. ArcGIS API for JavaScript小白入门

    简单理解就是:通过js调用arcgis相关的方法和通过html引入css等资源来展示地图,代码如下: <!DOCTYPE html> <html> <head> & ...

  2. HTML基础——基础标签

    一.HTML概述 htyper text markup language  即超文本标记语言. 超文本: 就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 标记语言: 标记(标签)构成的语 ...

  3. Kotlin版Aspect入门篇

    介绍: AspectJ是一个面向切面编程的一个框架,它扩展了java语言,并定义了实现AOP的语法.在将.java文件编译为.class文件时默认使用javac编译工具,AspectJ会有一套符合ja ...

  4. InnoDB On-Disk Structures(一)-- Tables (转载)

    转载.节选于https://dev.mysql.com/doc/refman/8.0/en/innodb-tables.html 1.InnoDB Architecture The following ...

  5. 《软件安装》VMware Workstation 不注册 下载

    问答环节 问:为什么要下载安装VMware Workstation 答:VMware Workstation 可以安装虚拟机,我们可以把我们安装的一些软件装在虚拟机上面,防止自己的电脑卡顿(软件装多了 ...

  6. TypeScript初体验

    第一次运行TypeScript 1.创建文件夹并初始化项目 mkdir ts-demo cd ts-demo npm init -y 2.安装typescript与ts-node # 局部安装 npm ...

  7. 如何在Mac上识别和删除损坏的字体

    字体看起来像无害的文件,而且大多数时候都是这样.但是,就像任何计算机文件一样,字体可能会损坏或损坏.发生这种情况时,它们可能会导致文档或应用程序出现问题.在Mac上使用“ 字体簿”来验证已安装的字体, ...

  8. excel提取一类具有相似结构的部分数据,2种方式;数据——分列——分割符号/固定宽度;

    1.数据如同下图,这里我们需要提取 ¥...¥,也就是2¥及其中的内容: 鼠标选种某条数据,然后按Ctrl+A,则选种需要的所有数据:点击数据——分列:  2.根据分割符号分列:  3.选择合适的分隔 ...

  9. (day67)组件、组件化、组件传参、JS补充(命名转换、for in 、数据转换)、css取消选中和模拟小手

    目录 一.初识组件 (一)概念 (二)特点 二.组件的分类 (一)根组件 (二)局部组件 (三)全局组件 二.数据组件化 三.组件的传参 (一)父传子 (二)子传父 四.JS补充 (一)与html命名 ...

  10. python访问Apollo获取配置

    操作系统 : CentOS7.3.1611_x64 Python 版本 : 3.6.8 Apollo源码地址: https://github.com/ctripcorp/apollo 访问Apollo ...