#L0038. 校园晨跑打卡

校园晨跑打卡

题目背景

某年秋季联赛提高组第一天第二题。

题目描述

小舟觉得晨跑特别有意思,干脆自己动手做了一款名为《校园晨跑》的养成小游戏,玩家每天按时上线完成打卡任务。

游戏的地图可以看作一棵包含 nn 个结点和 n1n-1 条边的树:每条边连接两个结点,任意两个结点之间都存在路径互相可达,结点按 11nn 编号。

游戏里有 mm 位玩家,第 ii 位玩家的起点是 sis_i,终点是 tit_i。每天打卡任务开启时,所有玩家在第 00 秒同时从各自起点出发,以每秒跑过一条边的速度,沿最短路径不停地奔向自己的终点,到达终点即完成当天的打卡。(地图是一棵树,因此每个人的行进路线唯一确定。)

为了统计游戏热度,小舟在每个结点上安排了一名观察员。结点 jj 的观察员只在第 wjw_j 秒抬头看一眼:一位玩家能被这名观察员看到,当且仅当他在第 wjw_j 秒恰好到达结点 jj。小舟想知道,每名观察员各自能看到多少位玩家?

注意:玩家到达终点后就立即退出游戏,不能停在原地等待之后再被看到。也就是说,对于以结点 jj 为终点的玩家:若他在第 wjw_j 秒之前就已到达,结点 jj 的观察员看不到他;若他恰好在第 wjw_j 秒到达终点,观察员可以看到他。

输入格式

第一行两个整数 nnmm,其中 nn 表示树的结点数量(也是观察员的数量),mm 表示玩家数量。

接下来 n1n-1 行,每行两个整数 uuvv,表示结点 uu 与结点 vv 之间有一条边。

接下来一行 nn 个整数,第 jj 个整数为 wjw_j,表示结点 jj 的观察员抬头的时刻。

接下来 mm 行,每行两个整数 sis_itit_i,表示一位玩家的起点与终点。

对于所有数据,保证 1si,tin1\leq s_i,t_i\leq n0wjn0\leq w_j\leq n

输出格式

输出一行 nn 个整数,第 jj 个整数表示结点 jj 的观察员能够看到的玩家数量。

样例

6 3
2 3
1 2 
1 4 
4 5 
4 6 
0 2 5 1 2 3 
1 5 
1 3 
2 6
2 0 0 1 1 1
5 3 
1 2 
2 3 
2 4 
1 5 
0 1 0 3 0 
3 1 
1 4
5 5
1 2 1 0 1

提示

样例 1 说明

对于 11 号点,wi=0w_i=0,只有起点在 11 号点的玩家才会被看到,因此玩家 11 和玩家 22 被看到,共 22 人。

对于 22 号点,第 22 秒时没有玩家位于此结点,共 00 人。

对于 33 号点,第 55 秒时没有玩家位于此结点,共 00 人。

对于 44 号点,玩家 11 被看到,共 11 人。

对于 55 号点,玩家 11 被看到,共 11 人。

对于 66 号点,玩家 33 被看到,共 11 人。

子任务

各测试点的数据规模及特点如下表所示。(数据范围个位上的数字可以帮助判断数据类型。)

测试点编号$n=$$m=$约定
$1\sim 2$$991$$991$所有人的起点等于自己的终点,即 $\forall i,\ s_i=t_i$
$3\sim 4$$992$$992$所有 $w_j=0$
$5$$993$$993$
$6\sim 8$$99994$$99994$$\forall i\in[1,n-1]$,$i$ 与 $i+1$ 有边,即树退化成 $1,2,\dots,n$ 按顺序相连的链
$9\sim 12$$99995$$99995$所有 $s_i=1$
$13\sim 16$$99996$$99996$所有 $t_i=1$
$17\sim 19$$99997$$99997$
$20$$299998$$299998$

提示

评测环境中调用栈空间不单独设限,但递归层数过深(例如树退化为链时)仍可能耗尽栈空间导致崩溃,请注意程序所需的栈空间,调用栈占用的空间会计入总内存。

难度 省选/NOI-
通过率
尝试 0
已通过 0
ID
772
类型
传统题
Time Limit
2000ms
Memory Limit
512MiB
上传者