带权并查集板子

以一道区间和查询来说明板子如何使用

1.merge的时候只需要维护两个根节点的距离,利用的是合并时题目给的信息
2.find的时候更新维护是子节点到根的距离
3.需要加一个查询函数,因为距离数组是开在结构体内部的。

题目描述

对于一个长度为 N 的整数数列 A1,A2,AN,小蓝想知道下标 lr 的部分和 i=lrAi=Al+Al+1++Ar 是多少?

然而,小蓝并不知道数列中每个数的值是多少,他只知道它的 M 个部分和的值。其中第 i 个部分和是下标 liri 的部分和 j=liri=Ali+Ali+1++Ari, 值是 Si

对于所有评测用例, 1N,M,Q105,1012Si1012,1liriN, 1lrN 。数据保证没有矛盾。

蓝桥杯 2022 省赛 A 组 J 题。

#include <bits/stdc++.h> using namespace std; #define ll long long # define int long long #define ull unsigned long long #define pii pair<int,int> #define baoliu(x, y) cout << fixed << setprecision(y) << x #define endl "\n" #define debug1(x) cerr<<x<<" " #define debug2(x) cerr<<x<<endl const int N = 2e5 + 10; const int M = 1e6 + 10; const int inf = 0x3f3f3f3f; const int mod = 998244353; const double eps = 1e-8; int n, m; int a[N]; struct DSU { vector<int> f, siz,d; DSU() {} DSU(int n) { init(n); } void init(int n) { f.resize(n); std::iota(f.begin(), f.end(), 0); siz.assign(n, 1); d.resize(n); for(int i=0;i<n;i++)d[i]=0; } int find(int x) { if (f[x] != x) { int root = find(f[x]); d[x] += d[f[x]];//f[x]到根距离已经被更新 f[x] = root;//让x指向根 } return f[x]; } bool same(int x, int y) { return find(x) == find(y); } bool merge(int l, int r,int add) { int x = find(l); int y = find(r); if (x == y) { return false; } d[y]=d[l]+add-d[r]; siz[x] += siz[y]; f[y] = x; return true; } int size(int x) { return siz[find(x)]; } int query(int u,int v){ int ans=d[v]-d[u]; return ans; } }; void solve(){ int q; cin>>n>>m>>q; DSU dsu(n+5); for(int i=1;i<=m;i++){ int sum=0; int u,v;cin>>u>>v>>sum; u--; dsu.merge(u,v,sum);//根节点是最小值 } for(int i=1;i<=q;i++){ int u,v;cin>>u>>v; u--; if(dsu.same(u,v)){ int ans=dsu.query(u,v); cout<<ans<<endl; } else { cout<<"UNKNOWN"<<endl; } } } signed main() { cin.tie(0); ios::sync_with_stdio(false); int t; //cin>>t; t=1; while (t--) { solve(); } return 0; }

__EOF__

本文作者爱飞鱼
本文链接https://www.cnblogs.com/mathiter/p/18048859.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   potential-star  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示