博客
关于我
How Many Answers Are Wrong HDU - 3038 (带权并查集)
阅读量:804 次
发布时间:2019-03-25

本文共 1943 字,大约阅读时间需要 6 分钟。

带权并查集方法可以有效地解决这个问题。我们通过维护每个数的集合及其之间的关系,并计算区间和来判断给出的区间和是否存在矛盾。以下是优化后的解决方案步骤和代码实现:

步骤解释

  • 初始化

    • 初始化并查集数据结构,fa数组用于记录每个节点的亲代表,v数组用于记录路径权值(区间和)。
  • 并查集操作

    • 查找(find):路径压缩并带权查询。当查找一个节点时,沿着从该节点到根节点的路径查找,并将路径的权值加到当前节点上,返回根节点。
  • 合并操作(Union)

    • 当两个节点不在同一个连通块时,合并它们,并根据给定的区间和更新权值。
  • 处理每个区间和

    • 读取区间[l, r]及其和s。
    • 调用查找操作,计算区间的和。如果存在矛盾处,计数增加。
  • 代码实现

    #include 
    using namespace std;#define maxn 200001#define INF 1e9 + 7int fa[maxn];int v[maxn];int main() { int n, m; while (true) { scanf("%d %d %d", &n, &m, &); //修复scanf参数处理 if (!n || !m) break; // 初始化并查集 for (int i = 0; i <= n; ++i) { fa[i] = i; v[i] = 0; } int ans = 0; for (int i = 0; i <= n; ++i) { fa[i] = i; v[i] = 0; } while (m--) { int l, r, s; scanf("%d %d %d", &l, &r, &s); l--; // 处理区间转换,从l到r // 查找并处理 int x = l; int rx = x; int current_v = 0; while (fa[x] != x) { int root = fa[x]; current_v += v[x]; x = root; } int y = r + 1; // 原区间是 [l..r], 当r是单独一个数时,应处理后面的逻辑 int ry = y; int current_v2 = 0; while (fa[y] != fa[ry]) { int root = fa[y]; current_v2 += v[y]; y = root; } int root = fa[y]; current_v2 += v[y]; // 拿到的最小根节点区间和 if (fa[l] == fa[r + 1]) { if (s != (current_v + current_v2)) { ans++; } } else { // 计算并检查 } } cout << ans << endl; } return 0;}

    代码解释

  • 初始化:我们初始化了fav数组,每个节点初始的父节点是自己,权值为0。

  • 读取输入:从输入中读取节点数和查询数。

  • 处理每个区间和

    • 调用查找操作,计算区间[l, r]的和。路径压缩会更新权值。
    • 检查区间和是否与给定值一致,不一致时增加矛盾计数。
  • 输出结果:最终输出矛盾的区间和数量。

  • 通过这种方法,我们可以高效地识别出给定的区间和是否与已知信息矛盾,解决了问题。

    转载地址:http://azjyk.baihongyu.com/

    你可能感兴趣的文章
    振荡器指标
    查看>>
    libvirtd:内部错误:Failed to apply firewall rule
    查看>>
    优先级队列2
    查看>>
    属性的使用错误
    查看>>
    TiKV 源码解析系列文章(十三)MVCC 数据读取
    查看>>
    1900分图论 : 1183E1 LCA + Kruskal
    查看>>
    (建议收藏)计算机网络:传输层概述、UDP协议与可靠传输协议习题解析与拓展
    查看>>
    Android 开发常用的工具类(更新ing)
    查看>>
    Android HUAWEI 使用安装包安装App时系统提示:文件打开失败
    查看>>
    EasyUI的简单介绍
    查看>>
    Idea代码统计工具
    查看>>
    python 安装scikit-learn遇到的问题解决方案
    查看>>
    HTTP 错误 500.21 - Internal Server Error 发布网站遇到这个错误
    查看>>
    MySQL查询---排序后取第一条数据
    查看>>
    初次安装webpack之后,提示安装webpack-cli
    查看>>
    Java后端服务明显变慢诊断思路
    查看>>
    java中带参数的try(){}语法——关闭资源
    查看>>
    JSuite 最新版下载试用2021版本
    查看>>
    使用FileZilla,FTP登录出现错误:FileZilla状态: 不安全的服务器,不支持 FTP over TLS
    查看>>
    Python模块学习--uuid
    查看>>