poj1182 并查集经典题 Weighted Union-Find Sets

来源:互联网 发布:东京 泡泡 上门 知乎 编辑:程序博客网 时间:2024/06/05 11:56

没注意只有一个case   不知道怎么就错了 -  -


带权并查集的"权"表示该节点与爸爸的关系

这题的关系有

0.儿子与爸爸是同类

1.儿子被爸爸是吃   -  -

2.儿子吃爸爸         =  =

为什么权要这样设?待会解释


所以每个节点多一个变量记录权


那两个不是父子关系的点之间的关系怎么表示呢?

为了解决这个问题  我们把每条指向父亲的边都看作向量!


eg:假如现在UFS是这样的

(节点,权)  (1,0)->(2,1)->(3,2)->(4,0)

那么可知:

1与2的关系是同类;

2被3吃;

3吃4;

4与4(自己)是同类


2与1是什么关系呢? 因为1->2的长度(权)是0 那么2->1的长度不也是0吗?  就是说2与1也是同类

3与2是什么关系?  同理  |3->2|=-1  怎么办?  权只有 0,1,2 啊 !  所以-1+3=2   即权为2  就是3吃吃2了

如果 a吃b b吃c c吃d 呢? 是多少怎么处理? 


#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 50010;struct node{    int f,r;}ani[maxn];inline int mod(int a){    a%=3;    return a<0?a+3:a;}int ff(int x){    int &f=ani[x].f,t=f;    f=(f==x?x:ff(f));    ani[x].r=mod(ani[x].r+ani[t].r);    ///BE CAREFUL!  Father is change!!    return f;}int main(){    //freopen("a.in","r",stdin);    int m,n;    scanf("%d%d",&m,&n);    int ans=0;    for(int i=1;i<=m;i++)    {        ani[i].f=i;        ani[i].r=0;    }    for(int i=0;i<n;i++)    {        int o,a,b;        scanf("%d%d%d",&o,&a,&b);        o--;        int ra=ff(a),rb=ff(b);  ///a to be father of b        if(a>m||b>m)            ans++;        else if(o&&a==b)            ans++;        else        {            if(ra!=rb)            {                ani[rb].f=ra;                ani[rb].r=mod(o+ani[a].r-ani[b].r);            }            else if(mod(ani[b].r-ani[a].r)!=o)                ans++;        }    }    printf("%d\n",ans);    return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 两岁宝宝不小心被猫抓出血怎么办 两岁宝宝小蛋蛋肿了怎么办 吃大胺片过敏蛋皮又痛又痒怎么办 刚出生二十天宝宝蛋蛋有疝气怎么办 宝宝八个月蛋蛋一个没掉下来怎么办 引产23天同房内射肚子疼怎么办l 房东禁止养宠物如果养了怎么办 圆通快递退回但没有签收记录怎么办 信用卡没有收到又退回去了怎么办 新疆不给邮寄快递被退回运费怎么办 淘宝上已付款还在想留言怎么办 b超显示肾结石但x光看不到怎么办 洗脚让洗脚妹摸射精了怎么办 在新疆塔城干活不给工资怎么办 挨打了屁股肿的又大又硬怎么办 李贞将军有关电影小腿肌腱疼怎么办 朋友老婆老是背地里说我坏话怎么办 当你听到别人在背后说你时怎么办 分手了和前任是同事需要见面怎么办 和附近的人聊天他约你见面怎么办 微信约妹子发完红包拉黑了怎么办 户口本被前妻扣着不能结婚怎么办 部队当兵户口没注销退伍回去怎么办 没打疫苗的狗狗咬了我的嘴巴怎么办 新车被撞了还没上牌怎么办? 签了合同上两天班想辞职怎么办 刚到公司上班两天想辞职怎么办 签入职合同一天后就不想干了怎么办 入职材料交了第二天就想离职怎么办 宝宝40周多了还不想出来怎么办 工厂上班不到三个月不给辞工怎么办 单位辞职后不上班了保险怎么办 药流6个小时没流下来怎么办 小孩有口臭怎么办这几天不想吃饭 七个月宝宝口臭不想吃饭怎么办啊 老公工作累想要辞职不上班怎么办 药物流产后第6天咋下坠的怎么办 药流第一天胎囊没有掉下来怎么办 药流还有一点没流干净怎么办 3个月的宝宝被电了一下怎么办 宝宝吃奶粉过敏下巴红有疙瘩怎么办