摘要: 这题和某道最短路题神似。对于任意点对,将他们连边,不如将他们分别沿$x,y$轴方向上点按顺序连起来,这样不仅可能多连通一些点,也花费更低,所以按照最短路那题的连边方式跑一个kruskal就行了。 1 #include<iostream> 2 #include<cstdio> 3 #include<c 阅读全文
posted @ 2019-10-15 20:19 Ametsuji_akiya 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 关于Kruskal重构树可以翻阅本人的最小生成树笔记。 这题明显裸的Kruskal重构树。 然后这题限制$\le p$的边不能走,实际上就是要满足走最小边权最大的瓶颈路,于是跑最大生成树,构建Kruskal重构树。 通过倍增跳到最浅祖先位置,就get到了一个点可以走到的点集(子树所有叶子)。这些点里 阅读全文
posted @ 2019-10-15 19:36 Ametsuji_akiya 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 方法一:套路性的,二分距离,然后把距离点对距离小于答案的边都联通起来,然后看集合数量超过k说明答案小,增大,否则减小。 方法二:贪心,类kruskal。n个点,k个连通块,则需要有效连接(同一个块内的点相互连接不算)n-k次。那么用类似kruskal的证明过程发现最小的边一定要联通使得集合与集合间距 阅读全文
posted @ 2019-10-15 14:44 Ametsuji_akiya 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 标题解法是吓人的。 图上修改询问,不好用数据结构操作。尝试转化为树来维护。发现(不要问怎么发现的)最小生成树在这里比较行得通,因为最近异色点对一定是相邻的(很好想),所以只要看最短的一条两端连着异色点的边,而分析一下kruskal的过程,发现满足这种要求的最小边一定会被加进去(因为相邻异色点总要联通 阅读全文
posted @ 2019-10-15 12:24 Ametsuji_akiya 阅读(188) 评论(0) 推荐(0) 编辑