
并查集
lushanlushan0026
退役acmer,准研究生
展开
-
[NOI2002]银河英雄传说 边带权并查集
维护两个东西,深度和大小get操作:int get(int x){ if(x==fa[x]) return x; int rt=get(fa[x]); dep[x]+=dep[fa[x]]; return fa[x]=rt;}合并(unite)操作:void unite(int x,int y){ x=get(x),y=get(y);...原创 2020-05-01 17:39:48 · 311 阅读 · 0 评论 -
poj 1182食物链 扩展域并查集
这题也可以用边带权并查集,但是我觉得扩展域并查集更好理解。对于每个点x 有三个域 分别是 同类域,捕食域和天敌域当x和y是同类时,显然x和y的三个域对应相同当x吃y时,x的同类域和y的天敌域并起来,x的捕食域和y的同类域并起来,由题目知道x->y->z 之间成环 所以z是吃x的 所以x的天敌域要和y的捕食域并起来在并之前判断是否为真话如果x和y是同类 有两个冲突...原创 2020-05-01 10:55:23 · 182 阅读 · 0 评论 -
poj 1733 经典并查集 附边带权和扩展域两种方法
题目链接:poj 1733先求一遍前缀和 设每次询问为 l,r,ans 由前缀和的性质我们知道如果 ans='odd' 说明 sum[r]和sum[l-1] 的奇偶性不同,否则说明两者奇偶性相同第一种方法是边带权,边权d[x]为0,表示x和fa[x]的奇偶性相同,如果d[x]为1,表示x和fa[x]的奇偶性不同 在进行路径压缩时,对x到树根的所有边权做异或运算,可以得到x和树根...原创 2020-04-30 21:50:48 · 634 阅读 · 0 评论 -
POJ - 1456 基础并查集+贪心
考虑这样一个贪心策略,利润大的物品肯定要有较高的优先级,我们先把商品按利润排序,每个商品 肯定只能在 1到di-1这其中的一个时间点卖出,我们可以用并查集维护每个商品能卖出的最左时间点 当一个商品在当前时间点 t 卖出,那么t这个位置就被占据了,我们得合并t 和 t-1 并把t-1作为t的根,这样对于下一个在t点的商品,它只要根据get操作 找到最左卖出的时间点并且占据它就行(把这个商品的利润...原创 2020-04-30 16:36:58 · 379 阅读 · 0 评论