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

news/2025/2/22 6:18:06/

2069. 网络分析

文章目录

      • 题目描述
      • 解题思路
      • 代码实现

题目描述

给出一个 nnn个孤立点的图,每个点上的权值都是 000,进行 mmm 次操作
操作 1 :把两个点所在的连通块合并起来
操作 2 :向某个点所在的连通块的所有点累加一个值
n≤104,m≤105,n≤104,m≤105n≤10^4,m≤10^5,n≤10^4,m≤10^5n104,m105,n104,m105
最后输出每个点上的权值

解题思路

  • 并查集 树上差分

我们通过并查集合并连通块,保证同一个连通块内的点同属一个集合
对于每一个合并操作,找到两个点所属的集合
如果这两个点不在同一连通块,那么我们构造一个新点,使这个新点成为集合合并后的根节点

这样进行 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;
}

http://www.ppmy.cn/news/35813.html

相关文章

如何应对上手英文工具站的 8 大误区

这次给大家带来程序员如何应对上手英文工具站的 几点误区&#xff0c;帮助大家跳出程序员思维&#xff0c;一起出海软件掘金 ~ ----- 小小分割线 ----- 误区一&#xff1a;以为参加了这一次航海&#xff0c;就可以赚到美刀。这样想&#xff0c;往往很难达到预期。 我的看法&…

济南高新技术企业认定条件

济南高新技术企业认定条件2022 &#xff08;一&#xff09;企业申请认定时须注册成立一年以上&#xff1b; &#xff08;二&#xff09;企业通过自主研发、受让、受赠、并购等方式&#xff0c;获得对其主要产品&#xff08;服务&#xff09;在技术上发挥核心支持作用的知识产权…

跨域常见的解决方案

目录 一&#xff1a;什么是跨域 二&#xff1a;为什么会跨域 三&#xff1a;跨域的解决方案 1.代理服务器 1.1.生产环境 1.2.开发环境 2.JSONP 3.CORS 一&#xff1a;什么是跨域 跨域是指浏览器在向一个服务器发送请求时&#xff0c;该请求的地址与当前页面的地址不同…

数据结构——AVL树

一、AVL树 1.概念 二叉搜索树虽然可以缩短查找效率&#xff0c;单如果数据有序或解决有序&#xff0c;二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;发明了一种解决上述问题的方法&#xff1a;当向二叉搜索树…

05期:面向业务的消息服务落地实践

这里记录的是学习分享内容&#xff0c;文章维护在 Github&#xff1a;studeyang/leanrning-share。 我们在上次分享中聊到了领域驱动设计和微服务&#xff0c;在 DDD 中有一个术语叫做领域事件&#xff0c;例如订单模型中的订单已创建、商品已发货。领域事件会触发下一步的业务…

【内网安全】 横向移动PTH哈希PTT票据PTK密匙Kerberos密码喷射

文章目录章节点域横向移动-PTH-Mimikatz&NTLM概述1、Mimikatz2、impacket-at&ps&wmi&smb域横向移动-PTK-Mimikatz&AES256概述域横向移动-PTT-漏洞&Kekeo&Ticket概述1、漏洞-MS14-068(webadmin权限) 利用漏洞生成新用户(高权限)的票据2、kekeo(高权…

【SSconv:全色锐化:显式频谱-空间卷积】

SSconv: Explicit Spectral-to-Spatial Convolution for Pansharpening &#xff08;SSconv&#xff1a;用于全色锐化的显式频谱-空间卷积&#xff09; 全色锐化的目的是融合高空间分辨率的全色&#xff08;PAN&#xff09;图像和低分辨率的多光谱&#xff08;LR-MS&#xff…

多个sheet Excel 数据 导入数据库 如何实现?

文章目录多个sheet Excel 数据 导入数据库 如何实现&#xff1f;传统方式Apache POIJExcelAPIEasyExcel总结结语多个sheet Excel 数据 导入数据库 如何实现&#xff1f; 将 Excel 文件中的多个 sheet 导入数据库&#xff0c;一般有以下几种实现方式&#xff1a; 使用 JDBC 直接…