【网络分析】并查集/树上差分

简介: 笔记

题目描述


10.png

解题思路


并查集 树上差分

我们通过并查集合并连通块,保证同一个连通块内的点同属一个集合

对于每一个合并操作,找到两个点所属的集合

如果这两个点不在同一连通块,那么我们构造一个新点,使这个新点成为集合合并后的根节点


这样进行 k 次有效合并操作后,就会产生 k 个新点

我们所构造的图是若干棵树,编号为 1−n 的节点都是树的叶子节点


对于每次连通块累加操作,我们只需要向集合的根节点累加一个值即可

最后对我们所构造出来的一堆树DP(只是遍历一下),把每个点的权值下放到子树中的所有节点中

然后依次输出编号为 1−n 的节点的权值即可


代码实现


#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 200010, M = N << 1;
int h[N], e[M], ne[M], idx;
void add(int a, int b)  // 添加一条边a->b
{
    e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}
int n, m;
int p[N];
int find(int x) {
    if (x != p[x]) {
        p[x] = find(p[x]);
    }
    return p[x];
}
int f[N];
void dfs(int u, int fa) {
    for (int i = h[u]; ~i; i = ne[i]) {
        int j = e[i];
        f[j] += f[u];
        dfs(j, u);
    }
}
int main()
{
    cin >> n >> m; memset(h, -1, sizeof h);
    for (int i = 0; i < N; i++) p[i] = i;
    int root = n + 1;
    int op, a, b;
    while (m -- ) {
        cin >> op >> a >> b;
        if (op == 1) {
            int fx = find(a), fy = find(b);
            if (fx != fy) {
                add(root, fx), add(root, fy);
                p[fx] = p[fy] = root;
                root++;
            }
        } else {
            int fx = find(a);
            f[fx] += b;
        }
    }
    for (int i = n + 1; i < root; i++) if (p[i] == i) dfs(i, 0);
    for (int i = 1; i <= n; i++) cout << f[i] << ' '; cout << endl; 
    return 0;
}
相关文章
|
6月前
|
监控 测试技术 网络架构
网络优化利器:深入理解生成树Portfast
【4月更文挑战第22天】
169 0
|
6月前
|
算法
|
6月前
|
算法 网络协议
生成树协议:网络稳定的守护者
【4月更文挑战第22天】
93 0
|
11天前
|
网络虚拟化
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性。本文介绍了这三种协议的原理、特点及区别,并提供了思科和华为设备的命令示例,帮助读者更好地理解和应用这些协议。
29 4
|
3月前
|
机器学习/深度学习 前端开发 数据挖掘
基于Python Django的房价数据分析平台,包括大屏和后台数据管理,有线性、向量机、梯度提升树、bp神经网络等模型
本文介绍了一个基于Python Django框架开发的房价数据分析平台,该平台集成了多种机器学习模型,包括线性回归、SVM、GBDT和BP神经网络,用于房价预测和市场分析,同时提供了前端大屏展示和后台数据管理功能。
102 9
|
3月前
|
网络协议
|
6月前
|
机器学习/深度学习 数据可视化 算法
R语言神经网络与决策树的银行顾客信用评估模型对比可视化研究
R语言神经网络与决策树的银行顾客信用评估模型对比可视化研究
|
6月前
|
负载均衡 网络虚拟化
【专栏】生成树协议(STP),用于消除网络环路并确保单向通信路径,提高可靠性和避免循环是至关重要的
【4月更文挑战第28天】本文详细介绍了生成树协议(STP),用于消除网络环路并确保单向通信路径。STP基于IEEE 802.1D,涉及根桥选举、端口角色分配及构建无环路径。高级特性包括快速STP(RSTP)的快速收敛、多实例STP(MSTP)的负载均衡和容错,以及各种保护机制。文章还讨论了实际案例和故障排除,为网络工程师提供STP的全面理解与应用指南。
290 1
|
6月前
|
机器学习/深度学习
spss modeler用决策树神经网络预测ST的股票
spss modeler用决策树神经网络预测ST的股票
spss modeler用决策树神经网络预测ST的股票
【树上倍增】【割点】 【换根法】3067. 在带权树网络中统计可连接服务器对数目(二)
【树上倍增】【割点】 【换根法】3067. 在带权树网络中统计可连接服务器对数目

热门文章

最新文章

下一篇
无影云桌面