#P6178. 【模板】Matrix-Tree 定理

【模板】Matrix-Tree 定理

题目描述

给定一张 nn 个结点 mm 条边的带权图(可能为无向图,可能为有向图)。

定义其一个生成树 TT 的权值为 TT 中所有边权的乘积。

求其所有不同生成树的权值之和,对 109+710^9+7 取模。


注意:

  1. 本题中,有向图的生成树指的是 11 为根的外向树

  2. 两棵生成树 T1,T2T_1,T_2 不同,当且仅当存在存在一条边 ee,满足 eT1,  eT2e\in T_1,\ \ e\notin T_2

输入格式

第一行:三个整数 n,m,tn,m,t,分别表示图的结点数量,边的数量和图的类型(t=0t=0 时为无向图,t=1t=1 时为有向图)。

接下来 mm 行:每行三个整数 u,v,wu,v,w

如果 t=0t=0,表示 u,vu,v 之间有一条权值为 ww 的无向边;

如果 t=1t=1,表示从 uuvv 有一条权值为 ww 的有向边。

输出格式

第一行:一个整数 ansans,表示给定的图的生成树权值和对 109+710^9+7 取模的结果。

5 8 0
2 3 1
1 2 3
4 5 1
4 2 2
3 5 2
3 4 3
3 4 1
3 3 5

144

5 9 1
1 2 3
3 2 1
1 3 1
2 4 2
3 5 1
4 3 4
3 5 1
5 4 1
4 4 6

72

提示

【样例 11 解释】

样例 11 中的无向图如左图所示:

右图为其一个权值为 3×1×2×3=183\times 1\times 2\times 3=18 的生成树的例子。


【样例 22 解释】

样例 22 中的有向图如左图所示:

右图为其一个权值为 1×1×1×2=21\times 1\times 1\times 2=2 的生成树(以 11 为根的外向树)的例子。


【数据范围】

对于 100%100\% 的数据:$1\leq n\leq 300,\ \ 1\leq m\leq 10^5,\ \ t\in \{0,1\},\ \ 1\leq u,v\leq n,\ \ 1\leq w\leq 10^9$。

对于测试点 1,2,3,4,5,61,2,3,4,5,6t=0t=0;对于测试点 7,8,9,10,117,8,9,10,11t=1t=1

图中 可能 存在重边和自环,重边算作多条边。