卧薪尝胆,厚积薄发。
Magic Matrix
Date: Sun Feb 10 19:32:57 CST 2019
In Category:
NoCategory
Description:
称一个矩阵为魔法矩阵,当且仅当满足一下三点:
$a_{i,j}=a_{j,i},a_{i,i}=0,a_{i,j}\leqslant \max(a_{i,k},a_{k,j})$
。 单次询问一个矩阵是否为魔法矩阵。
$n\leqslant2500$
Solution1:
首先当然是把原矩阵看成距离矩阵。
$$
\begin{align}
a_{i,j}\leqslant\max(a_{i,k},a_{k,j})\Rightarrow a_{i,k}\leqslant\max(a_{i,j},a_{j,k}),a_{k,j}\leqslant\max(a_{k,i},a_{i,j})
\end{align}
$$
只是交换下标而已,但是注意到,上面那个式子说明任意一个三元组最大边权的边一定至少有两个,那么我们就可以把所有边按长度排序,依次加入,然后要求任意时刻不能有一个三元组只有两条边,这也就是说任意时刻都必须是一个完全图,于是用并查集统计联通块内点数和边数检查就行了。
Solution2:
首先先用
$kruskal$
求出来一个最小瓶颈生成树,设
$f_{i,j}$
表示树上
$i$
和
$j$
路径上的最大边权,那么显然有
$a_{i,j}\geqslant f_{i,j}$
,不然肯定
$f_{i,j}$
不优,然后
$a_{i,j}\leqslant\max(a_{i,k},a_{k,j}),a_{i,k}\leqslant\max(a_{i,l},a_{l,k})\Rightarrow a_{i,j}\leqslant \max(a_{i,k_1},a_{k_1,k_2}\dots,a_{k_m,j})$
,于是有
$a_{i,j}\leqslant f_{i,j}$
,因此
$a_{i,j}=f_{i,j}$
,然后就可以检查了。
In tag:
图论-kruskal
Copyright © 2020
wjh15101051
ღゝ◡╹)ノ♡