博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并查集(路径更新) LA 3027 Corporative Network
阅读量:5936 次
发布时间:2019-06-19

本文共 986 字,大约阅读时间需要 3 分钟。

 

题意:训练指南P192

分析:主要就是一个在路径压缩的过程中,更新点i到根的距离

#include 
using namespace std;const int N = 2e4 + 5;struct DSU { int rt[N], d[N]; void init(void) { memset (rt, -1, sizeof (rt)); memset (d, 0, sizeof (d)); } int Find(int x) { if (rt[x] != -1) { int root = Find (rt[x]); //先找到根 d[x] += d[rt[x]]; //回溯的过程把距离更新 return rt[x] = root; //路径压缩 } else return x; } void Union(int x, int y) { if (x == y) { d[x] = 0; return ; } else { rt[x] = y; d[x] = abs (x - y) % 1000; } } bool same(int x, int y) { return Find (x) == Find (y); }}dsu;int main(void) { int T; scanf ("%d", &T); while (T--) { int n; scanf ("%d", &n); char str[3]; dsu.init (); int x, y; while (scanf ("%s", str) == 1) { if (str[0] == 'O') break; if (str[0] == 'E') { scanf ("%d", &x); dsu.Find (x); printf ("%d\n", dsu.d[x]); } else { scanf ("%d%d", &x, &y); dsu.Union (x, y); //初始就是到fa的距离 } } } return 0;}

  

转载于:https://www.cnblogs.com/Running-Time/p/5027140.html

你可能感兴趣的文章
python-while循环
查看>>
手机端上传图片及java后台接收和ajaxForm提交
查看>>
【MSDN 目录】C#编程指南、C#教程、ASP.NET参考、ASP.NET 4、.NET Framework类库
查看>>
jquery 怎么触发select的change事件
查看>>
angularjs指令(二)
查看>>
(原創) 如何建立一个thread? (OS) (Linux) (C/C++) (C)
查看>>
<气场>读书笔记
查看>>
领域驱动设计,构建简单的新闻系统,20分钟够吗?
查看>>
web安全问题分析与防御总结
查看>>
React 组件通信之 React context
查看>>
ZooKeeper 可视化监控 zkui
查看>>
Linux下通过配置Crontab实现进程守护
查看>>
ios 打包上传Appstore 时报的错误 90101 90149
查看>>
Oracle推出轻量级Java微服务框架Helidon
查看>>
密码概述
查看>>
autoconf,automake,libtool
查看>>
jQuery的技巧01
查看>>
基于泛型实现的ibatis通用分页查询
查看>>
gopacket 使用
查看>>
AlertDialog对话框
查看>>