卡片迷宫

题面描述

地下城的迷宫一共有 nn 个房间,按照 0,1,,n10, 1, \dots, n - 1 编号。其中 00 号房间是入口,n1n - 1 号房间有着无尽的宝藏。房间之间由 mm 条单向的隧道连接,并且每条隧道都有一个颜色。这些隧道除了颜色就不可以区分了。

为了拿到宝藏,你决定准备一些卡片,每张卡片上涂有一种颜色,并且将这些卡片叠成一堆。然后你从 00 号入口出发,如果当前房间的所有隧道中,有至少一条与最上方的卡片颜色一样,那你可以任选一条对应颜色的隧道,并且将最上方的卡片扔掉。如果没有这种颜色的隧道或者没有卡片,则你可以任意选择一条隧道,并且增加一张对应颜色的卡片放到最上方。

聪明的你拿到了整个地下城的地图,但不幸的是,一旦走进地下城,你就会把地图忘掉。因此,你希望找出一组恰当的卡牌,使得你有机会走到宝藏所在的房间。请输出所需要的最小的卡牌数量,使得你有机会拿到宝藏。

输入格式

所有颜色将用一个 00k1k - 1 之间的整数表示。

第一行三个整数 n,m,kn, m, k,表示房间的个数、隧道的个数、颜色的个数。

接下来 mm 行,每行三个整数 ui,vi,ciu_i, v_i, c_i,表示有一条 uiviu_i \to v_i 的单向隧道,颜色为 cic_i。注意房间的编号、颜色的编号均从 00 开始。

输出格式

一行一个整数,表示所需要的最少卡牌数量。

样例

3 3 2
0 1 1
1 0 1
1 2 0
1

说明/提示

如上图。如果你选择的卡牌是 [0][0],你可以这么走:

  • 当前在 00 号房间(入口),存在一条从 00 出发,颜色为 00 的隧道,于是你通过这条隧道走到了 11 号房间,卡牌变成 [][]
  • 当前在 11 号房间,由于你没有卡牌了,所以可以任意选择隧道。选择颜色为 11 的隧道,通向了 22 号房间,卡牌变为了 [1][1]
  • 当前在 22 号房间,并获得了无限的宝藏。

如果你初始时没有卡牌,则你会在 0,10, 1 号房间无限循环,也就拿不到宝藏了。因此,你至少需要一张卡牌。

范围

1n501 \le n \le 501m1001 \le m \le 1001k201 \le k \le 20

对于所有 i=1,,mi = 1, \dots, m0ui,vi<n0 \le u_i, v_i \lt nuiviu_i \not= v_i0ci<c0 \le c_i \lt c

注意两个房间之间可能有多条隧道,一个房间可能存在多条颜色相同的隧道。

国庆提高/省选组比赛

Attended
Status
Live... (Attended)
Rule
IOI
Problem
40
Start at
2025-10-15 19:32
End at
2025-11-16 0:00
Duration
1104 hour(s)
Host
Partic.
85