• 使用并查集处理树的路径


    力扣312次周赛第四题,我还不会做,记录一下这类题型,代码来自y总。

    6191. 好路径的数目

    给你一棵 n 个节点的树(连通无向无环的图),节点编号从 0 到 n - 1 且恰好有 n - 1 条边。

    给你一个长度为 n 下标从 0 开始的整数数组 vals ,分别表示每个节点的值。同时给你一个二维整数数组 edges ,其中 edges[i] = [ai, bi] 表示节点 ai 和 bi 之间有一条 无向 边。

    一条 好路径 需要满足以下条件:

        开始节点和结束节点的值 相同 。
        开始节点和结束节点中间的所有节点值都 小于等于 开始节点的值(也就是说开始节点的值应该是路径上所有节点的最大值)。

    请你返回不同好路径的数目。

    注意,一条路径和它反向的路径算作 同一 路径。比方说, 0 -> 1 与 1 -> 0 视为同一条路径。单个节点也视为一条合法路径。

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/number-of-good-paths

    思路:

            将树中节点按节点权值排序,从小到大遍历,只能用左边权值比它小的点。

            遍历后将他们加入树中,用并查集表示他们属于的集合,遍历每个集合。

    AC代码:

    1. class Solution {
    2. public:
    3. vector<int> p;
    4. int find(int x) {
    5. if (p[x] != x) p[x] = find(p[x]);
    6. return p[x];
    7. }
    8. int numberOfGoodPaths(vector<int>& vals, vectorint>>& edges) {
    9. int n = vals.size();
    10. vectorint>> g(n);
    11. for (auto& e: edges) {
    12. int a = e[0], b = e[1];
    13. g[a].push_back(b);
    14. g[b].push_back(a);
    15. }
    16. vector<int> q(n);
    17. p.resize(n);
    18. for (int i = 0; i < n; i ++ ) p[i] = q[i] = i;
    19. sort(q.begin(), q.end(), [&](int a, int b) {
    20. return vals[a] < vals[b];
    21. });
    22. int res = 0;
    23. for (int i = 0; i < n; i ++ ) {
    24. int j = i + 1;
    25. while (j < n && vals[q[i]] == vals[q[j]]) j ++ ;
    26. for (int k = i; k < j; k ++ ) {
    27. int x = q[k];
    28. for (int y: g[x]) {
    29. if (vals[x] >= vals[y])
    30. p[find(x)] = find(y);
    31. }
    32. }
    33. unordered_map<int, int> hash;
    34. for (int k = i; k < j; k ++ )
    35. hash[find(q[k])] ++ ;
    36. for (auto& [k, v]: hash)
    37. res += v * (v + 1) / 2;
    38. i = j - 1;
    39. }
    40. return res;
    41. }
    42. };

  • 相关阅读:
    【好书分享第十一期】深入Rust标准库(文末送书)
    【数据结构】复习汇总I
    Linux网络配置,常用命令及远程工具
    macOS 安装brew
    百度竞价 - 百度单页竞价推广项目实操教程分享
    工业生产中废酸回收技术的原理分析
    看完这三招学会拼照片拼成拼图怎么拼
    Mysql kill session
    如何做好医药产品说明书翻译?
    4、Jvm(栈)
  • 原文地址:https://blog.csdn.net/qq_59183443/article/details/127044388