P10231 [COCI 2023/2024 #4] Putovanje

题目背景

**译自 [COCI 2023/2024 Contest #4](https://hsin.hr/coci/archive/2023_2024) T4「[Putovanje](https://hsin.hr/coci/archive/2023_2024/contest4_tasks.pdf)」**

题目描述

Malnar 先生终于迎来了他的年假。他决定要去的国家可以表示为 $n$ 个城市和 $m$ 条双向连接它们的道路。每条道路的长度相同,并且可以通过这些道路从任何一个城市到达另一个城市。从城市 $a$ 到城市 $b$ 的路径被定义为一系列道路,满足从城市 $a$ 开始,按照该序列依次遍历道路,最终到达城市 $b$。路径的长度定义为该路径上的道路数量。 Malnar 先生像以往一样预订了其中一个城市最贵的酒店,然后开始规划他的旅程。为了方便规划,他记录了从酒店到每个城市的最短路径长度。 由于对他期待已久的假期感到兴奋,Malnar 先生完全忘记了酒店位于哪个城市。他当然不想错过这次旅行,所以他请你确定酒店可能位于哪些城市。

输入格式

第一行两个整数 $n$ 和 $m\ (1\le n\le 5\cdot 10^4,n-1\le m\le 10^5)$,分别表示城市和道路的数量。 接下来 $m$ 行,每行两个整数 $u_i,v_i\ (1\le u_i,v_i\le n,u_i\neq v_i)$,表示城市 $u_i$ 和 $v_i$ 之间有一条道路。任意两城市之间最多只有一条道路。 最后一行有 $n$ 个整数,第 $i$ 个整数 $d_i\ (-1\le d_i

输出格式

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

说明/提示

### 样例解释 1 从城市 $4$ 到城市 $1$ 的路径长度为 $2$,到城市 $7$ 的路径长度为 $3$。因此,城市 $4$ 满足两个条件,酒店可以位于那里。 同样的情况也适用于城市 $6$。 ### 子任务 | 子任务编号 | 附加限制 | 分值 | | :--------: | :----------------------------------------------: | :--: | | $1$ | $m+1=n\le 5\ 000$,对于所有 $i$ 满足 $u_i+1=v_i$ | $10$ | | $2$ | 对于所有 $i>1$ 满足 $d_i=-1$ | $20$ | | $3$ | $n,m\le 5\ 000$ | $35$ | | $4$ | 无附加限制 | $45$ |