#sPFAybttg030302. 1504:【例 1】Word Rings

1504:【例 1】Word Rings

1505:【例 2】双调路径

题目描述

如今的道路收费发展很快。道路的密度越来越大,因此选择最佳路径是很现实的问题。城市的道路是双向的,每条道路有固定的旅行时间以及需要支付的费用。

路径是连续经过的道路组成的。总时间是各条道路旅行时间的和,总费用是各条道路所支付费用的总和。一条路径越快,或者费用越低,该路径就越好。严格地说,如果一条路径比别的路径更快,而且不需要支付更多费用,它就比较好。反过来也如此理解。如果没有一条路径比某路径更好,则该路径被称为最小路径。

这样的最小的路径有可能不止一条,或者根本不存在路径。

问题:读入网络,计算最小路径的总数。费用时间都相同的两条最小路径只算作一条。你只要输出不同种类的最小路径数即可。

输入格式

第一行有四个整数,城市总数 nn,道路总数 mm,起点 ss 和终点 ee

接下来的 mm 行每行描述了一条道路的信息,包括四个整数,两个端点 p,rp, r,费用 cc,以及时间 tt

两个城市之间可能有多条路径连接。

输出格式

输出一个整数,表示最小路径的总数。

样例

样例输入 #1

4 5 1 4
2 1 2 1
3 4 3 1
2 3 1 2
3 1 1 4
2 4 2 4

样例输出 #1

2

样例解释 #1

  • 城市数 n=4n=4,道路数 m=5m=5,起点 s=1s=1,终点 e=4e=4

  • 道路信息:

    1. 212 \leftrightarrow 1(双向),费用 22,时间 11
    2. 343 \leftrightarrow 4(双向),费用 33,时间 11
    3. 232 \leftrightarrow 3(双向),费用 11,时间 22
    4. 313 \leftrightarrow 1(双向),费用 11,时间 44
    5. 242 \leftrightarrow 4(双向),费用 22,时间 44
  • 1144 的可能路径:

    1. 1241→2→4:费用 2+2=42+2=4,时间 1+4=51+4=5
    2. 1341→3→4:费用 1+3=41+3=4,时间 4+1=54+1=5
    3. 12341→2→3→4:费用 2+1+3=62+1+3=6,时间 1+2+1=41+2+1=4
    4. 13241→3→2→4:费用 1+1+2=41+1+2=4,时间 4+2+4=104+2+4=10
  • 最小路径的定义:没有其他路径在 费用和时间两个维度都严格优于 它。

    • 比较路径:

      • 路径 1122:费用 44,时间 55
      • 路径 33:费用 66,时间 44
      • 路径 44:费用 44,时间 1010
    • 路径 44 比路径 1122 差(时间更长,费用相同),比路径 33 差(费用相同但时间更长)。

    • 路径 1122 与路径 33 无法比较:路径 33 时间更短但费用更高,路径 1122 费用更低但时间更长。

    • 因此最小路径有 22 类:

      1. 费用 44,时间 55(包含路径 1122,但费用时间相同,只算一种)
      2. 费用 66,时间 44(路径 33
    • 输出 22

数据范围

  • 1n1001 \le n \le 100
  • 0m3000 \le m \le 300
  • 1s,e,p,rn1 \le s, e, p, r \le n
  • 0c,t1000 \le c, t \le 100
  • 保证 ses \ne eprp \ne r

时空限制

  • 时间限制:1000 ms
  • 内存限制:65536 KB

注意:本题是双权值最短路径问题,需要找到所有 Pareto 最优解(非支配解)。可以使用动态规划或搜索,状态设计为 dp[u][cost] 表示到达节点 uu 且总费用为 costcost 时的最小时间,然后统计所有 Pareto 最优的 (cost, time) 对。由于费用和时间的范围较小(100×300=30000\le 100 \times 300 = 30000),状态数可行。