zoukankan      html  css  js  c++  java
  • 【带权并查集】食物链 POJ

    食物链 POJ - 1182

    思路:

    因为和这题差不多,所以就只简单地写一下关键点。

    路径压缩的关系维护:

    A与fa[A]的关系 fa[A]与root的关系 A与root的关系
    同类【0】 同类【0】 同类【0】
    同类【0】 吃root【1】 吃root【1】
    同类【0】 被root吃【2】 被root吃【2】
    吃fa[A]【1】 同类【0】 吃root【1】
    吃fa[A]【1】 吃root【1】 被root吃【2】
    吃fa[A]【1】 被root吃【2】 同类【0】
    被fa[A]吃【2】 同类【0】 被root吃【2】
    被fa[A]吃【2】 吃root【1】 同类【0】
    被fa[A]吃【2】 被root吃【2】 吃root【1】

    由表可以看出是前两个的和对3取模的结果

    [rela[A]=(rela[A]+rela[fa[A]])\%3 ]

    合并时的关系维护:

    (0:与后者同类;1:吃后者;2:被后者吃。)

    A与root[A]的关系 B与root[B]的关系 A与B的关系r root[A]与root[B]的关系
    1 0 2 1
    2 1 1 0
    0 2 0 2

    (表中仅列出了其中几种情况,其它省略)

    由此可观察出关系式:(感觉不太明显啊……)

    [rela[root A]=(rela[B]-rela[A]+r+3)\%3 ]

    为避免出现负数对3取模,括号内加上3.

    查询时的关系计算:

    已知A,B在同一个集合内(即已知A与root,B与root的关系),由此推出A与B的关系,再与给出的关系比较判断后者是否正确即可

    A与root的关系 rela[A] B与root的关系 rela[B] A与B的关系 relation
    0 2 1
    1 1 0
    2 0 2

    (表中仅列出了其中几种情况,其它省略)

    由此可观察出关系式:

    [relation=(rela[A]-rela[B]+3)\%3 ]

    为避免出现负数对3取模,括号内加上3.

  • 相关阅读:
    easyui
    mvc
    Servlet简单计算器 2.0
    简易Servlet计算器1.0
    javaBean 练习—封装学生信息
    application和javaBean练习
    远程存储程序
    通讯录
    黑名单管理代码总结
    DAO
  • 原文地址:https://www.cnblogs.com/streamazure/p/13467449.html
Copyright © 2011-2022 走看看