
并查集
bestFy
世界上最最最渣的oier.
展开
-
bzoj1202: [HNOI2005]狡猾的商人
题面在这里 做法: 差分约束。 每个操作(?操作询问傻傻分不清楚)x,y,zx, y, z可以看做sum[y]−sum[x−1]=zsum[y]-sum[x-1]=z。 并查集维护sum[i]sum[i]之间的联通性。假如在同一连通块里就判断是否合法。 也可以建边之后用spfaspfa判负环。/************************************************原创 2017-12-15 22:22:23 · 290 阅读 · 0 评论 -
bzoj1050: [HAOI2006]旅行comf
题面在这里题意:给一个图,每条边有边权。 给一个s和t,如果s和t之间没有路径输出IMPOSSIBLE,否则输出路径上最大边和最小边的比值的最小值。做法:你把边从小到大排序。那么对于一个最小值x,我们从x开始从小到大加边,并查集维护,直到s和t联通,那条最后一条边权比上x就是这个答案。 于是我们暴力枚举最小边是什么,每次更新答案即可。代码:/**********原创 2018-01-12 22:07:30 · 236 阅读 · 0 评论 -
bzoj3673: 可持久化并查集 by zky
题面在这里题意:3种操作 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0做法:可持久化并查集,相当于每个时间建一棵线段树维护每个数的fa[]。代码:/************************************************************* Problem:原创 2017-12-29 12:55:37 · 333 阅读 · 0 评论 -
bzoj3674: 可持久化并查集加强版
题面在这里题意:3种操作 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0做法:可持久化并查集,相当于每个时间建一棵线段树维护每个数的fa[]。 这题我用了按秩合并。这么理解,把并查集看成很多棵树,先不考虑路径压缩。 如果两个节点要合并,相当于把他们所在的两棵树合并。假定两个树的根节点为fx,fy原创 2017-12-29 14:31:35 · 271 阅读 · 0 评论 -
bzoj1821: [JSOI2010]Group 部落划分 Group
题面在这里题意:平面上n个点要划分为k个部落,定义部落间的距离为部落中最近的两点距离。 现在要求部落间最近的距离最远。求这个距离。做法:显然可以二分答案。 二分这个最近的距离,于是任意两点距离比它还小的都要在一个部落里。 然后用并查集数一下连通块个数即可。 时间复杂度O(n2×log)O(n^2\times{log})代码:/**************原创 2018-01-05 16:41:20 · 271 阅读 · 0 评论