P17002 [NWERC 2019] 无用交换机 / Disposable Switches

题目背景

译自 [Northwestern Europe Regional Contest (NWERC) 2019](http://2019.nwerc.eu)。

题目描述

你最近被 Netwerc Industries 雇为网络工程师,第一项任务是评估他们庞大而陈旧的办公网络。在绘制完整网络图后,你发现网络由交换机和连接它们的网线组成,并且你隐约觉得不仅有些交换机是冗余的,甚至有些交换机根本不会被用到。为了在向老板汇报前验证自己的说法,你决定写一个程序来测试这些判断。 你收集到的数据包含网络拓扑以及每根网线的长度。虽然你不知道数据包通过每根网线所需的精确时间,但你知道它可以表示为 $\ell/v+c$,其中: - $\ell$ 是网线长度; - $v$ 是网线中的传播速度; - $c$ 是数据包进入和离开该网线时的传输开销。 你无法测量 $v$ 和 $c$。你唯一知道的是,它们都是实数,满足 $v>0$ 且 $c\ge 0$,并且对于所有网线都相同。你还知道,当数据包从一个交换机传到另一个交换机时,网络路由算法会确保数据包走一条**最优路径**,也就是总传输时间最小的路径。 给定网络图和每根网线长度,请判断哪些交换机无论 $v$ 和 $c$ 取什么值,都不可能出现在从交换机 $1$ 到交换机 $n$ 的最优路径上。

输入格式

输入包含: - 第一行包含两个整数 $n,m$ ($2\le n\le 2000$, $1\le m\le 10^4$),分别表示交换机数量和网线数量。交换机编号为 $1$ 到 $n$。 - 接下来 $m$ 行,每行包含三个整数 $a,b,\ell$ ($1\le a,b\le n$, $1\le \ell\le 10^9$),表示一根长度为 $\ell$、连接交换机 $a$ 和 $b$ 的网线。 任意一对交换机之间至多有一根网线,且没有网线连接某个交换机自身。保证任意两台交换机之间都有路径。

输出格式

第一行输出一个整数 $k$,表示无论如何都不可能出现在从交换机 $1$ 到交换机 $n$ 的最优路径上的交换机数量。 第二行输出 $k$ 个整数,表示这些未使用交换机的编号,按递增顺序输出。

说明/提示

【数据规模与约定】 - $2\le n\le 2000$。 - $1\le m\le 10^4$。 - $1\le a,b\le n$,$1\le \ell\le 10^9$。 - 任意一对交换机之间至多有一根网线。 - 没有自环。 - 保证任意两台交换机之间都有路径。