并查集
Hanks_o
一名。
展开
-
bzoj1015: [JSOI2008]星球大战starwar(并查集)
题目传送门 这道题挺不错的吧。 开始我想按顺序去模拟。 用并查集来维护联通块(因为是双向边) 结果发现每删掉一个点后好难搞。 时间复杂度大概是O(n*m)吧。想了想,倒推不就好了嘛。 倒推的话用一个数组标记这个点现在可不可以用。 那么每次进来一个点我只要遍历和他相连的边就好了嘛。一开始所有点都没有连边。那么联通块的个数为n(所有点的个数)-K(删除点的个数) 然后逐个去连边。如果能连原创 2017-09-18 13:08:39 · 566 阅读 · 0 评论 -
bzoj3545: [ONTAK2010]Peaks(主席树+最小生成树)
题目传送门 。解法: 好题啊。 只会不强制在线的。 强制在线的表示不会。离线。 首先x可以到达的点其实都可以互相到达。 那么我们可以看作是一个联通块。 要求边权尽量小其实就是最小生成树啊。离线首先按每次询问的x排序。 然后依次建小于等于x的最小生成树。 那么当前v所在的联通块的第k大实际上就是答案。 并查集压缩路径的时候合并一下主席树即可。吐槽: 时限太少了。...原创 2018-04-11 21:23:53 · 401 阅读 · 0 评论 -
bzoj2733: [HNOI2012]永无乡(并查集+主席树)
题目传送门 。解法: 跟3545解法差不多。 https://blog.csdn.net/hanks_o/article/details/79903342 这道题还没了边权。 直接连通。那么并查集。 据说要启发式。 小的向大的合并。 然后就没了?代码实现:#include<cstdio>#include<cstring>#includ...原创 2018-04-16 17:04:06 · 302 阅读 · 0 评论 -
bzoj1529: [POI2005]ska Piggy banks(并查集)
题目传送门 。解法: 据说叫什么外向树。 https://wenku.baidu.com/view/820697649b89680202d82527.html代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include&...原创 2018-04-16 16:25:27 · 203 阅读 · 0 评论 -
bzoj3296: [USACO2011 Open] Learning Languages(并查集)
题目传送门 。解法: 并查集。 一头牛连向他能说的语言。 然后可以通过翻译的话就相当于双向边咯。 意思就是牛可以去找语言,语言也可以找牛。 最后记录有多少个不同的集合-1即可代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>...原创 2018-04-16 13:00:51 · 293 阅读 · 0 评论 -
bzoj2079: [Poi2010]Guilds(并查集)
题目传送门 。解法: 找孤立点就行。 并查集乱搞??代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#include<cmath>#include<qu...原创 2018-03-27 11:11:53 · 298 阅读 · 0 评论 -
bzoj3444: 最后的晚餐(并查集+组合数学)
题目传送门 。解法: 并查集维护要挨在一起的人啊。 假设现在有tt段人要挨在一起。 然后这tt段人一共有t个人。 那么其实只有n-t+tt个点在参与排序。 全排列就好。 然后每一段都可以倒过来。 所以最后要乘2^tt判0其实蛮好判断。 如果一个点的度>2的话那么输出0 或者当前这两个点已经在同一个集里面的话那肯定是冲突的啦(这是在我想了很多组数据猛然发现的)代...原创 2018-03-22 08:06:42 · 304 阅读 · 0 评论 -
bzoj4195: [Noi2015]程序自动分析(离散化+并查集)
题目传送门 。解法: 相等的可以用一个并查集维护在一起。 那么当所有相等的都连好以后。 问所有不相等的。如果不相等的在同一个块那么说明有问题。。 离散化是显然的啦代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#includ...原创 2018-03-15 19:27:42 · 269 阅读 · 0 评论 -
bzoj1016: [JSOI2008]最小生成树计数(最小生成树+搜索)
题目传送门 神题啊膜拜。解法: 首先有这样的两个定理(不知道对不对啊) 定理1: 图G。 树1和树2同为图G的最小生成树(方案可能很多种嘛) 如果树1权值为1的边有三条的话。 那么树2权值为2的边也刚好有三条。 即: 不同的最小生成树方案等权边的条数都一样。定理2: 如果树1的权值为1的边联通的是1,3,4这三个点。 那么树2的权值为1的边联通的也是1,3,4这三个点。 我不原创 2017-10-09 14:40:26 · 329 阅读 · 0 评论 -
bzoj1202: [HNOI2005]狡猾的商人(带权并查集)
题目传送门 这道题我只想说“还有这种操作?!” 学了一发带权并查集。 真的强!解法: 用带权并查集维护前缀和。 fa[i]跟原来并查集的定义一样。 sum[i]表示i到fa[i]这条链的全值和。 比如 1 2 3 4 5 i=5,fa[i]=2 那么sum[i]=14带权并查集:int sum[110],fa[110];int findfa(int x) { if(x!原创 2017-10-06 09:55:15 · 441 阅读 · 0 评论 -
bzoj4690: Never Wait for Weights(带权并查集)
题目传送门 。解法: 我就写过一次带权并查集。 还好他不难想。。 看到这道题我就觉得是带权并查集。。。fa[i]表示祖先。 sum[i]表示跟祖先的差值。 xx表示x的祖先,yy表示y的祖先。 那么每次x和y差w的时候 推式子? x-xx=sum[x] – xx-x=-sum[x] y-yy=sum[y] y-x=w;xx-yy? 将xx合并到yy。 x...原创 2018-04-12 19:38:36 · 272 阅读 · 0 评论