题意
有一个n个点m条边的无向图,连接一条边需要对应费用。有p个关键点,关键点有属性。求使相同属性的关键点联通的最小费用。
对于
100
%
100 \%
100% 的数据,
0
<
c
i
≤
p
≤
10
,
0
<
u
i
,
v
i
,
d
i
≤
n
≤
1000
,
0
≤
m
≤
3000
,
0
≤
w
i
≤
20000
0 < c_i \leq p \leq 10, \ 0 < u_i, v_i, d_i \leq n \leq 1000, \ 0 \leq m \leq 3000, \ 0 \leq w_i \leq 20000
0<ci≤p≤10, 0<ui,vi,di≤n≤1000, 0≤m≤3000, 0≤wi≤20000。
数据点1-4,
p
=
2
p=2
p=2
数据点5-8,
p
≤
4
p \le4
p≤4
数据点9-14,
p
≤
10
,
c
i
=
1
p \le 10, c_i = 1
p≤10,ci=1
数据点15-20,
p
≤
10
p \le 10
p≤10
题解
先考虑“数据点9-14,
p
≤
10
,
c
i
=
1
p \le 10, c_i = 1
p≤10,ci=1”,因为p很小,考虑状压DP。发现在使一个集合的点联通的过程中,每个点的作用有两种:1.作为这个集合的点被联通;2.这个集合的点通过它联通。考虑记录状态,除了记录点积s联通外,再记一个当前考虑到的点i,之后一步有两种转移:1.通过i再联通另一个集合,2.走向下一个点(即i不再发挥作用2)。发现每一种联通的方式都可以用一个个点考虑的方式考虑到,于是这样的DP是可行的。但转移2是不满足拓扑序的,故先按s从小到大做,对于同一个s,它们之间的转移相当于每个点有初始值后在原图上跑最短路。
对于有不同属性的点,也状压记录哪些属性联通,枚举子集转移即可。