
并查集
小元勋
生生不息 摸鱼不止
展开
-
构造完全图--并查集+Kruskal思想
Loj 10067题目分析:要使完全图G的最小生成树为唯一T,我们按照Kruskal思想将边从小到大排序,然后依次加一条边连接两边的集合,由于完全图每两个点之间都有边,则对于x和yx和yx和y这两个集合需要的边数为cnt[x]∗cnt[y]cnt[x]*cnt[y]cnt[x]∗cnt[y],由于我们要找最小完全图,并且图G的最小生成树为T,那么:则需要一条边必须为树T的边,则新建边的数...原创 2019-07-16 20:13:46 · 258 阅读 · 0 评论 -
程序自动分析--并查集+离散化
ACwing 239题目分析:将相等的合并在同一个集合中,最后再判断x!=yx!=yx!=y如果在一个集合中,就不满足约束由于x,y很大x,y很大x,y很大,需要离散化先sortsortsort,再uniqueuniqueunique,再lowerlowerlower_boundboundboundCode:#include <bits/stdc++.h>using...原创 2019-07-29 11:52:25 · 179 阅读 · 0 评论 -
银河英雄传说--“带边权”并查集
ACwing 240题目分析:维护一个d[x]d[x]d[x]表示xxx到xxx的祖先的距离,稍微改动一下findfindfind函数维护一个size[x]size[x]size[x]表示xxx所处的集合的大小,当将xxx合并到yyy的尾巴上时d[fx]=size[fy]d[fx]=size[fy]d[fx]=size[fy]两点之间间隔的点=∣d[x]−d[y]−1∣=|d[x]-d...原创 2019-07-29 16:04:56 · 146 阅读 · 0 评论 -
走廊泼水节--kruskal+并查集
ACwing 348题目分析:对于一个完全图,每两个节点之间都有边相连考虑kruskalkruskalkruskal的过程,对于集合xxx和yyy,将其连成完全图,并且最小生成树是原树,那么要加的边的权值为(cnt[x]∗cnt[y]−1)∗(w+1)(cnt[x]*cnt[y]-1)*(w+1)(cnt[x]∗cnt[y]−1)∗(w+1)Code:#include <bi...原创 2019-07-29 16:40:12 · 149 阅读 · 0 评论 -
「一本通 1.1 练习 4」家庭作业 -- 贪心+并查集
loj 10008题目分析:将按照w从大到小排序,放的越后越好w从大到小排序,放的越后越好w从大到小排序,放的越后越好维护一个f[i]表示i之前能放的最靠后的位置,用并查集实现f[i]表示i之前能放的最靠后的位置,用并查集实现f[i]表示i之前能放的最靠后的位置,用并查集实现Code:#include <bits/stdc++.h>using namespace st...原创 2019-08-22 16:05:46 · 424 阅读 · 0 评论