#1004. 基建狂魔 (crazy)

内存限制:512 MiB 时间限制:1000 ms 输入文件:crazy.in 输出文件:crazy.out
题目类型:传统 评测方式:文本比较
上传者: root

题目描述

「朝辞白帝彩云间,千里江陵一日还。两岸猿声啼不住,轻舟已过万重山。」
—— 李白《早发白帝城》

40 年走来不易,但发展永无止境。今天,中国因为在基础设施建设上的建树,被戏称为「基建狂魔」。

在城市中,你可以看到在一定范围内总有道路正在施工。

假定一个城市有 个关键站点,其中,有 对站点之间是有可能修建道路的,在第 对站点之间修建道路的代价为 。按照惯例,城市规划者需要用最少的代价修建 条道路,使得这些站点之间互相连通。而为了彰显我国的基础设施建设能力,你的任务是计算出总共有多少种修建道路的方案。

由于方案可能太多,以至于超出合理的范围,你只需要简单地输出方案数对 取模的答案。

输入格式

从文件 crazy.in 中读入数据。

第一行两个正整数 ,含义如题。

接下来 行,每行三个整数,,表示在 和 两个站点之间可以修建一条代价为 的无向道路。

由于有一些欺骗经费的现象存在,有一些节点可能会有修往自身的道路方案,还有一些节点之间可能会有很多种道路方案,你应当按照题意妥善的统计这些情况。

输出格式

输出到文件 crazy.out 中。

一行一个整数,表示方案数 的值。

样例

样例输入

4 6
1 2 1
1 3 1
1 4 1
2 3 2
2 4 1
3 4 1

样例输出

8

数据范围与提示

对于 的数据,。

另有 的数据,保证对于任意 ,满足 的 不超过 个。

其中 的数据,保证对于任意 ,有 。

另有 的数据,保证对于任意 有 。

对于 的数据,,,。

提示:矩阵树定理
对于任意一张图,设 为它的邻接矩阵, 为它的度数矩阵,则它的基尔霍夫矩阵为 。
具体来说,记 为基尔霍夫矩阵,若有边 u->v,则 K[u][u]++, K[v][v]++, K[u][v]--, K[v][u]--。
即 , 为 之间边的条数的相反数。
这样构成的矩阵的行列式的值,就为这张图一般生成树的个数。
/crazy 目录下的参考代码提供了能够算出一个无向图一般生成树个数的函数。
当然,如果你不愿意使用该定理,你可以认为第三题的满分是 分。