题意
宫水三叶擅长手工,她自己编织了一张网。
这张网可以用一个 n n n 个点 m m m 条边的连通图来表示,每一条边都有长度。
但是这张网毕竟是可燃物。某一天,网上的 k k k 个节点在 0 0 0 时刻突然同时被点燃了,火焰以单位速度沿着边向外扩散。具体来说,如果有一条长度为 l l l 的边连接着点 x , y x,y x,y ,假设第 i i i个 时刻 x x x 节点被点燃了,那么在 i + l i+l i+l 的时刻 y y y 节点也会被点燃。反之也是成立的。
如果整张图的 n n n 个节点全部被点燃了,那么就认为这张图完全被点燃了。
既然着火了,那么首要任务就是救火。三叶请小H
来帮忙。在
0
0
0 时刻时,小H
随机选择了若干个已经被点燃的点,将它们扑灭。但是,小H
扑灭了那些点后并没有使整张图完全被点燃的时间推晚!
三叶觉得小H
运气太差了,于是她想知道这个事件的概率。
形式化的说,小H
有
2
k
2^k
2k 种灭火方案(包含一个都不选)。假设小H
随机从中选一种,有多少概率选到的灭火方案没能使整张图完全被点燃的时间推晚。
假设在没有灭火时整张图完全被点燃从时刻 a a a 开始,灭火后整张图完全被点燃从时刻 b b b 开始,而没能使整张图完全被点燃的时间推晚的方案当且仅当 a = b a=b a=b 。
对于所有数据,满足
1
≤
n
≤
1
0
5
,
1
≤
m
≤
2
×
1
0
5
,
1
≤
k
≤
20
1\le n \le 10^5,1 \le m \le 2 \times 10^5,1 \le k \le 20
1≤n≤105,1≤m≤2×105,1≤k≤20。
整张图保证没有重边和自环,并且保证联通。
k
k
k 个在
0
0
0 时刻被点燃的点的编号互不相同。
对于每条边满足
1
≤
x
i
,
y
i
≤
n
,
1
≤
l
i
≤
1
0
9
1 \le x_i,y_i \le n ,1 \le l_i \le 10^9
1≤xi,yi≤n,1≤li≤109 。
每个测试点具体限制见下表:
测试点编号 | n n n | k k k | 特殊性质 |
---|---|---|---|
1 ∼ 2 1 \sim 2 1∼2 | ≤ 10 \le 10 ≤10 | ≤ 3 \le 3 ≤3 | 无 |
3 ∼ 6 3 \sim 6 3∼6 | ≤ 1 0 3 \le 10^3 ≤103 | ≤ 8 \le 8 ≤8 | m ≤ 2 × 1 0 4 m \le 2 \times 10^4 m≤2×104 |
7 7 7 | ≤ 1 0 5 \le 10^5 ≤105 | ≤ 8 \le 8 ≤8 | 特殊性质A |
8 8 8 | ≤ 1 0 5 \le 10^5 ≤105 | ≤ 8 \le 8 ≤8 | 特殊性质B |
9 ∼ 10 9 \sim 10 9∼10 | ≤ 1 0 5 \le 10^5 ≤105 | ≤ 8 \le 8 ≤8 | 无 |
11 ∼ 12 11 \sim 12 11∼12 | ≤ 1 0 5 \le 10^5 ≤105 | ≤ 15 \le 15 ≤15 | 特殊性质A |
13 13 13 | ≤ 1 0 5 \le 10^5 ≤105 | ≤ 15 \le 15 ≤15 | 特殊性质B |
14 ∼ 16 14 \sim 16 14∼16 | ≤ 1 0 5 \le 10^5 ≤105 | ≤ 15 \le 15 ≤15 | 无 |
17 ∼ 19 17 \sim 19 17∼19 | ≤ 1 0 5 \le 10^5 ≤105 | ≤ 20 \le 20 ≤20 | 特殊性质A |
20 20 20 | ≤ 1 0 5 \le 10^5 ≤105 | ≤ 20 \le 20 ≤20 | 特殊性质B |
21 ∼ 25 21 \sim 25 21∼25 | ≤ 1 0 5 \le 10^5 ≤105 | ≤ 20 \le 20 ≤20 | 无 |
特殊性质A:满足
m
=
n
−
1
m=n-1
m=n−1 ,对于第
i
i
i 条边,满足
x
i
=
i
,
y
i
=
i
+
1
x_i=i,y_i=i+1
xi=i,yi=i+1 。
特殊性质B:满足
m
=
n
−
1
m=n-1
m=n−1 。
题解
考场:
不知道出于何种心态一直觉得它是个性质题(可能受昨天T2影响),猜了半天结论都是假的,到最后才发现转化一下式子,每个点到关键点距离的最小值(记为
m
n
u
mn_u
mnu)的最大值(记为
a
n
s
ans
ans)不变,从关键点集合的角度考虑,即为每个点的距离
≤
a
n
s
\le ans
≤ans的关键点不能全部删掉,即删掉的点集不能完全包含任意一个求出的点集。于是也没多想,感觉只会暴力枚举点集然后枚举子集判断,效率
O
(
3
n
)
O(3^{n})
O(3n),赶快敲完后看时间不多,情急之下想到分块枚举子集,效率
O
(
2
n
/
2
×
3
n
/
2
)
O(2^{n/2} \times 3^{n/2})
O(2n/2×3n/2)好像能卡过,然后赶紧码完调不出来,只有64pts的暴力。
正解:
slz:我没想到到你们 不会做……
xjq、szm:这题挺良心的啊
效率要是
O
(
2
n
)
O(2^{n})
O(2n),想到状压DP,记
f
[
s
]
f[s]
f[s]为集合s是否合法,初始状态即为所有已知的不能全删的点集,要转移到所有超集,枚举每个集合,向第一个不在集合的点,即可保证所有集合都被标记到。
反思:
多给点时间应该能想到吧?以后看到题还是要就题意入手,不要乱想一些奇怪的东西,既浪费时间又有损心态。这种集合的转移问题应该还是比较基础的,因为只需要判断集合的合法性,即有一个子集不行就不行,重复枚举子集肯定是浪费的,于是状压就相当于记忆化,可避免重复地枚举子集。