POJ 1962 Corporative Network [带权并查集]模板
一、题意解析
个节点,若干次询问, 表示从连一条边到,权值为; 表示询问到所指向的终点的距离。
二、实现代码
#include <bits/stdc++.h>
using namespace std;
const int N = 20010;
int fa[N];
int d[N]; // d[i] 表示距离根节点的距离
int n;
//带权并查集模板
int find(int x) {
//点权的理解:每个点到根的距离
if (fa[x] == x) return x; //自己是老大,返回自己
int root = find(fa[x]); //通过自己父亲找老大
d[x] += d[fa[x]]; //点权在路径压缩过程中,需要加上父亲的点权
return fa[x] = root; //路径压缩
}
int main() {
int T;
cin >> T;
while (T--) {
cin >> n;
// 带权并查集初始化
// 1、自已是自己的祖先
// 2、自己距离自己的距离是0,因为在全局变量区创建,无需专门初始化
for (int i = 0; i <= n; i++) fa[i] = i;
char op;
while (cin >> op) {
int x, y;
if (op == 'O') break;
if (op == 'E') { //查询
cin >> x;
find(x); //实现路径压缩,合并了x到根的权值
printf("%d\n", d[x]); // x到根的权值,记录在d[x]中
} else {
//把x的父节点设为y,题目说明了当前的x点是没有父节点的。
cin >> x >> y;
//带权并查集中,权是记录在点上的
fa[x] = y, d[x] = abs(x - y) % 1000;
}
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2014-04-09 后面需要继续完善的地方
2013-04-09 12、单机运行环境搭建之 --Centos6.4下webbench压力测试