小A所在的岛上一共有 n 座城市,城市之间一共有 m 条单向道路连接,保证这些道路不会形成环路,也就是不存在从某座城市出发,经过一系列的道路最终又回到原点的情况。
出于某种原因,小A需要从起点城市 s 前往城市 t,可能会有许多种不同的路径。小A想知道途径的可能的城市(除s、 t外)中,哪一个城市对他是最重要的,换句话说,从 s 到 t 的所有路径中,需要经过哪个城市的路径条数最多。
给定一个 n 个点 m 条边的有向无环图,所有点的编号从 1 到 n,给出一个起点 s 和一个终点 t,求出一个点 ans,使得经过 ans 的从 s 到 t 的路径最多。
输出这个点 ans 和具体的路径数,如果有多个点经过的数量相同,取编号最小的那一个;如果 s 不能到达 t,或从 s 到 t 的路径中间不能途径其他点,输出 -1。
从文件road.in中读入数据。
输入的第一行包含 4 个整数,分别为 n,m,s,t,表示点数、边数、起点和终点。
接下来 m 行,每行 2 个整数 u、v,表示存在一条从 u 到 v 的有向路径。
输出到文件road.out中。
输出仅1 行。如果 s 不可达 t,或中间不能途径其他点,输出 -1;否则输出两个数字,表示最重要的点的编号和经过它的路径条数。
5 10 1 5 1 2 1 3 1 4 1 5 2 3 2 4 2 5 3 4 3 5 4 5
2 4
样例图如下,起点是1,终点是5:
经过 2 的路径最多,一共有 4 条:{1,2,3,5},{1,2,4,5},{1,2,5},{1,2,3,4,5}。经过3的路径也有4条{1,2,3,5},{1,3,5},{1,3,4,5},{1,2,3,4,5},不过2编号更小。
青少年编程挑战赛