#402. 迷失游乐园

传统 2000 ms 256 MiB
标准 IO
文本比较 admin 标签

题目描述

姬哥来到了大鸟转转转游乐园,他知道这个游乐园可以用一张 nn 个点, mm 条边的有向图表示,每条边都有一个互不相同的边权。姬哥还知道,每个顶点的出度不超过 kk

为了更好的感受大鸟转转转游乐园的温暖,姬哥希望设计若干游园方案。每个游园方案可以用一个长度为 kk 的正整数序列 (c1,c2,...,ck)(c_1,c_2,...,c_k) 表示,且对于任意 1ik1 \leq i \leq k,都有 1cii1 \leq c_i \leq i

游园方案的具体含义如下:假设姬哥当前位于出度为 ii 的点 xx 时,他总会走向 xx 的所有出边中第 cic_i 小的那条边。因为所有边的边权互不相同,所以对于任意一个固定的序列 (c1,c2,...,ck)(c_1,c_2,...,c_k),姬哥的行动方案总是唯一的。

为了永远迷失在游乐园的温暖之中,姬哥希望你帮忙计算,有多少个序列 (c1,c2,...,ck)(c_1,c_2,...,c_k) ,使得对于任意点 u(1un)u(1 \leq u \leq n),姬哥都能根据上述行动规则重新回到 uu 点。因为答案可能很大,快来帮帮姬哥!

输入格式

第一行包含三个整数 nnmmkk1n1×1051\leq n \leq 1 \times 10^51mmin(6×105,(n1)×n)1\leq m \leq min(6 \times 10^5,(n-1)\times n), 1k141\leq k\leq 14),分别表示有向图的定点数、边数和每个点的出度上限。

接下来 mm 行,每行三个正整数 u,v,wu,v,w (1u,vn1\leq u,v \leq n, 1w1×1091\leq w \leq 1 \times 10^9),表示一条从点 uu 连到点 vv 边权为 ww 的有向边,输入数据保证所有边的边权互不相同,有向图中没有重边和自环,每个顶点的出度至少为 11

输出格式

一行一个正整数,代表可能的序列个数。

样例

输入样例

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

输出样例

3

输出解释

注意到这里不存在出度为3的点, c3c_3 可以取 {1,2,3} 中的任意一值。所有可能的序列有(1,2,1)、(1,2,2)、(1,2,3)。