描述
传送门:2018”百度之星”程序设计大赛 - 资格赛1006
度度熊有一张 $n$ 个点 $m$ 条边的无向图,所有点按照 $1,2,⋯,n$ 标号,每条边有一个正整数权值以及一种色光三原色红、绿、蓝之一的颜色。
现在度度熊想选出恰好 $k$ 条边,满足只用这 $k$ 条边之中的红色边和绿色边就能使 n 个点之间两两连通,或者只用这 $k$ 条边之中的蓝色边和绿色边就能使 $n$ 个点之间两两连通,这里两个点连通是指从一个点出发沿着边可以走到另一个点。
对于每个 $k=1,2,⋯,m$,你都需要帮度度熊计算选出恰好 $k$ 条满足条件的边的权值之和的最小值。
Input
第一行包含一个正整数 T,表示有 T 组测试数据。
接下来依次描述 T 组测试数据。对于每组测试数据:
第一行包含两个整数 n 和 m,表示图的点数和边数。
接下来 m 行,每行包含三个整数 a,b,w 和一个字符 c,表示有一条连接点 a 与点 b 的权值为 w、颜色为 c 的无向边。
保证$ 1 \leq T \leq 100$,$1 \leq n,m \leq 100$,$1 \leq a,b \leq n$,$1 \leq w \leq 1000$,$c \in \{R,G,B\}$,这里 R,G,B 分别表示红色、绿色和蓝色。
Output
对于每组测试数据,先输出一行信息 “Case #x:”(不含引号),其中 $x$ 表示这是第 $x$ 组测试数据,接下来 $m$ 行,每行包含一个整数,第 $i$ 行的整数表示选出恰好 $i$ 条满足条件的边的权值之和的最小值,如果不存在合法方案,输出 −1,行末不要有多余空格。
Examples
intput
1
2
3
4
5
6
7
8
9
101
5 8
1 5 1 R
2 1 2 R
5 4 5 R
4 5 3 G
1 3 3 G
4 3 5 G
5 4 1 B
1 2 2 Boutput
1
2
3
4
5
6
7
8
9Case #1:
-1
-1
-1
9
10
12
17
22
思路
- 显然是求最小生树,但是加了颜色限制。
- 按两种限制建两个最小生成树,在n-1条边的时候取min。大于n-1条边的时候就从没选的边里选一条最短的。
代码
1 |
|