#L4095. Putovanje

Putovanje

题目描述

译自 COCI 2023/2024 Contest #4 T4「Putovanje」

Malnar 先生终于迎来了他的年假。他决定要去的国家可以表示为 nn 个城市和 mm 条双向连接它们的道路。每条道路的长度相同,并且可以通过这些道路从任何一个城市到达另一个城市。从城市 aa 到城市 bb 的路径被定义为一系列道路,满足从城市 aa 开始,按照该序列依次遍历道路,最终到达城市 bb。路径的长度定义为该路径上的道路数量。

Malnar 先生像以往一样预订了其中一个城市最贵的酒店,然后开始规划他的旅程。为了方便规划,他记录了从酒店到每个城市的最短路径长度。

由于对他期待已久的假期感到兴奋,Malnar 先生完全忘记了酒店位于哪个城市。他当然不想错过这次旅行,所以他请你确定酒店可能位于哪些城市。

输入格式

第一行两个整数 nnmm1n5×1041 \le n \le 5 \times 10^4n1m105n-1 \le m \le 10^5),分别表示城市和道路的数量。

接下来 mm 行,每行两个整数 ui,viu_i, v_i1ui,vin1 \le u_i, v_i \le nuiviu_i \neq v_i),表示城市 uiu_iviv_i 之间有一条道路。任意两城市之间最多只有一条道路。

最后一行有 nn 个整数,第 ii 个整数 did_i1di<n-1 \le d_i < n)表示从城市 ii 到酒店所在城市的路径长度,如果 Malnar 先生没有记录这个值,则为 1-1

输出格式

第一行输出酒店可能位于多少个城市。

第二行输出酒店可能位于的城市编号,按升序输出。

样例 1

输入

77 66 11 22 11 33 33 44 33 55 33 66 55 77 22 1-1 1-1 1-1 1-1 1-1 33

输出

22 44 66

说明

从城市 44 到城市 11 的路径长度为 22,到城市 77 的路径长度为 33。因此,城市 44 满足两个条件,酒店可以位于那里。同样的情况也适用于城市 66

样例 2

输入

66 66 11 22 22 33 33 44 44 55 55 66 66 11 22 1-1 1-1 11 1-1 1-1

输出

22 33 55

样例 3

输入

44 33 11 22 22 33 33 44 11 1-1 1-1 11

输出

00

数据范围与提示

详细子任务附加限制及分值如下表所示:

子任务编号 附加限制 分值
11 m+1=n5000m+1=n \le 5000,对于所有 ii 满足 ui+1=viu_i+1=v_i 99
22 对于所有 i>1i>1 满足 di=1d_i=-1 1818
33 n,m5000n,m \le 5000 3232
44 无附加限制 4141