CF45B School
题目描述
CSYZ学校1820班有n个学生, 每个人都只有一个朋友,我们用 G(i) 表示第 i个人的朋友,但是需要注意, 自己朋友的朋友不一定是自己,即 G(G(i)) 不一定等于i;
由于学校总是会出现各种新闻信息, 而同学们十分热衷于了解这些新闻,所以大家都会把自己知道的新闻分享给自己的好朋(ji)友(lao);
现在会出现以下的行为:
在第 i 天,第 A[i] 个学生Jean了解到热度为 B[i] (B[i]>=1) 的新闻,此时Jean会马上与她的朋友分享这个新闻,而此时新闻热度已减为 B[i] – 1 ,Jean的朋友也会进行同样的转述,所以,Jean的朋友的朋友收到新闻时热度已减为 B[i] – 2 . 这样的行为会一直持续到新闻热度为0,因为这时已经没有人想去分享它了.
也就是说:如果一个人 x 收到了一个热度为 y(y!=0) 的新闻,他就会将其分享给自己的好朋友G(i),这个新闻热度对于他的的朋友来说就是 y – 1, 如果可能的话,这种行为就会一直持续下去.
但我们需要注意到,一个人可能会在一天内不止一次的收到同一条新闻,但此时新闻热度已不同。因此,等级为B[i] 的新闻会经过B[i] 次的转述。
你的任务是计算出 res[i] 的值——在第i天有多少学生了解到m天中他们的第一个新闻;
B[i] 的值在初始时给出,而 A[i] 的值由下面的公式得出 :

res[0] = 0;
(v[i]为一些给定的整数);
输入格式
第一行包含两个以空格分隔的整数 n和m,分别表示 学生人数和天数。
第二行包含n个以空格隔开的整数 G(i) , 表示编号为 i 的人的朋友,
第三行包含了m个以空格分隔的整数v[i] .
第四行包含了m个以空格分隔的整数B[i] .
输出格式
输出 m行,每行有一个数字.
第 i行表示res[i] ——m天内,在第i天了解到的第一个新闻的学生的人数,日期从输入文件给出的顺序开始编号, 不用输出res[0].
感谢@Jean 提供的翻译