[SCOI2008]城堡CASTLE
题号:NC20261
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

在一个国家里,有n个城市(编号为0 到n-1)。这些城市之间有n条双向道路相连(编号为0 到n-1),其中编号为i的道路连接了城市i和城市ri(一条道 路可以连接一个城市和它自身),长度为di
n 个城市中有m个拥有自己城堡, 可以抵御敌人侵略。如果没有城堡的城市遭受攻击,则离它最近的城堡将派兵前往救援。
你的任务是在不超过k个没有城堡的城市中建立城堡,使得所有城市中“离最近城堡的距离”的最大值尽量小。换句话说,若令dist(c)表示城市c的最近城堡离它的距离,则你的任务是让max{dist(c)}尽量小。 
输入数据保证存在方案使得对于每个城市,至少有一个城堡能够到达。

输入描述:

输入第一行为三个正整数n, m, k。
第二行包含n个整数r0,r1,…,rn-1
第三行包含n个整数d0,d1,…,dn-1
第四行包含m个各不相同的0~n-1之间的整数,分别为m个城堡所在的城市编号。

输出描述:

输出仅一行,包含一个整数,即max{dist(c)}的最小值。
示例1

输入

复制
5 0 1
1 2 3 4 0
1 1 1 1 1

输出

复制
2
示例2

输入

复制
3 1 1
1 2 0
1 2 3
2

输出

复制
1
示例3

输入

复制
2 1 1  
0 1  
1 1  
1 

输出

复制
0
示例4

输入

复制
10 3 3
0 2 0 0 2 2 8 3 8 7
10 9 1 8 1 3 7 2 8 1
3 4 6

输出

复制
3
示例5

输入

复制
2 0 1
1 0
5 10

输出

复制
5

备注:

100%的数据满足:2<=n<=50, 1<=di<=106, 0<=m<=n-k