首页 > 其他分享 >动态图连通性笔记

动态图连通性笔记

时间:2024-07-15 11:30:02浏览次数:12  
标签:连通性 log ell text reconnect 笔记 动态图 2n

首先离线的话有几种方法:

  • 线段树分治
  • 动态维护最大生成树:边的权值为他的(下一次)删除时间,加边正常做,询问时问路径最小值是否小于当前时刻.

动态图连通性 Holm-de Lichtenberg-Thorup (HLT)

  • 暴力:维护生成森林,若删树边则暴力找另一条边能替代这条树边.

  • 思想:给每条边赋一个“不重要度”. 每次未成功重连则提升之.

  • 算法:给每条边赋一个等级 \(\ell(e)\),初始为 0. 维护 \(\ell\) 意义下的最大生成森林:\(G_i=(V=V(G),E=\{e\in E(G)\mid\ell(e)\ge i\})\)(不需显式维护),\(F_i=G_i\cap F\),维护以下性质:

    1. \(F_i\) 是 \(G_i\) 的生成森林 \(\Longleftrightarrow\) \(F_i\) 连通性与 \(G_i\) 相同 \(\Longleftrightarrow\) \(F_i\) 是以 \(\ell(e)\) 为边权的最大生成森林(树).(显然.)
    2. \(G_i\) 每个连通块大小 \(\le\left\lfloor\frac n{2^i}\right\rfloor\)(保证边权上界为 \(\lceil\log_2n\rceil\)).

    删一条树边 \(e=(v,w)\) 后我们寻找重连边 \(\text{reconnect}(e,\ell(e))\).

    性质 1 告诉我们重连边 \(e'\) 满足 \(\ell(e')\le\ell(e)\),不然原树不是最大的. 故从 \(\ell(e)\) 开始按 \(\ell\) 降序找:

    \(\text{reconnect}\left(e=(v,w),k\right)\):\(F_k\) 上 \(e\) 把树分为 \(T_v,T_w\)(点集),不妨设 \(T_v\) 点数较小,把 \(T_v\) 上等级 \(=k\) 的边升到 \(k+1\). 【由于 \(T_v\) 点数较小,性质 2 仍满足(更具体地,\(T_v\) 点数 \(\le\left\lfloor\frac{连通块点数}2\right\rfloor\)),性质 1 显然满足.】然后找 \(T_v\) (图上)连出的等级 \(k\) 的边进行重连,若能则结束,否则升一级. 【此时这些边两侧都在 \(T_v\),而 \(T_v\) 在 \(F_{k+1}\),显然不破坏性质 1.】若仍未成功,尝试 \(\text{reconnect}(e,k-1)\).

  • 时间:由性质 2,\(i>\lceil\log_2n\rceil\) 时 \(G_i\) 就没点了,故 \(\ell(e)\le\lceil\log_2n\rceil\). 然后推理:

    1. 每条边只被上移 \(\log n\) 次.(显然)
    2. 总的来看,每条边只 \(\log n\) 次出现在 \(\text{reconnect}\).(因为每次失败都会上移.)
    3. 将一条边设为树边只需 \(O(\log n)\) 次树操作.(显然)
    4. 每次树操作可用 ETT, LCT, Top Tree, AAA 等之一完成,是 \(O(\log n)\).

    故修改 \(O(\log^2n)\),查询(\(\Leftrightarrow\) 在 \(F_0\) 上查)是 \(O(\log n)\).

  • 实现细节:对每个 \(x,l\) 维护从 \(x\) 出发、等级 \(l\) 的非树边列表;在 \(F_k\) 上需枚举一些点(一个连通块 / 子树)中有哪些点有等级 \(k\) 的非树边,这个可对所有“有对应等级的点”在动态树上打标记,(显然复杂度对的).

代码咕.

标签:连通性,log,ell,text,reconnect,笔记,动态图,2n
From: https://www.cnblogs.com/laijinyi/p/18302813/HLT

相关文章

  • 学习笔记-estimator
    基于tensorflow1.15importtensorflowastf#创建一个分类特征列,使用词汇表列表categorical_column=tf.feature_column.categorical_column_with_vocabulary_list(key="your_feature_name",#这应该是你的数据中特征的键名vocabulary_list=["value1","value2......
  • Improving News Recommendation via Bottlenecked Multi-task Pre-training论文阅读笔
    ImprovingNewsRecommendationviaBottleneckedMulti-taskPre-training论文阅读笔记Abstract现存的问题:​ 现有的PLM大多是在大规模通用语料库上预先训练的,并没有专门用于捕捉新闻文章中的丰富信息。因此,它们生成的新闻嵌入信息可能不足以表示新闻内容或描述新闻之间的关......
  • [笔记]快速傅里叶变换(FFT)
    模板题:P3803【模板】多项式乘法(FFT)快速傅里叶变换(FastFourierTransform,FFT)在算法竞赛中主要用于求卷积,或者说多项式乘法。如果我们枚举两数的各系数相乘,时间复杂度是\(O(n^2)\),而FFT可以将这一过程优化到\(O(n\logn)\)。流程整个FFT算法分\(3\)个过程:将\(2\)个多项式的......
  • XSS靶场——通关笔记
    第一关页面很简单,可以发现通过修改url中level1.php?name后面的字段,页面会改变,显示该字段的总长再查看源代码,根据源代码可知当有个弹窗就会执行函数,最后得到我们想要的“完成的不错”<script>alert(111)</script>第二关第二关似乎和第一关一样,不确定,试试同样的代码在......
  • problems笔记(^^)
    一些遇到的问题及其践而有效的解决方案CSND博客无法访问  解决方案 若是还无法访问......
  • Spring框架--个人笔记
    1.什么是spring框架1.spring是一款开源框架,解决企业开发的复杂性。2.spring框架提供了三大核心思想:IOC、AOP、DIIOC:控制反转。创建对象并管理生命周期。AOP:面向切面编程。不改变源码对代码进行扩展。DI:依赖注入。3.spring框架特点:1.方便解耦,简化开发。2.AOP编程的支持-......
  • JavaScript基础第一弹学习笔记
    1.什么是JavaScript?        JavaScript是一种运行在客户端(浏览器)的编程语言,实现人机交互效果2.作用①网页特效②表单验证③数据交互④服务端编程(就是node.js)3.JavaScript由什么组成?①ECMAScript:它规定了js基础语法核心知识。例如变量、分支语句、对象等②Web......
  • 7/14 训练笔记
    闲话数组开小挂分Kruskal跑\(m=9e6\)TLE问题D:CardGame简单猜结论得到答案是\(2^{n-1}-1\),需要快速幂。代码:#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intt,n;intqpow(intx,inty){intres=1;while(y){......
  • Datawhale2024年AI夏令营第二期:CV图像--学习笔记
       Deepfake攻防--图像赛道是该夏令营第二期的学习活动(“CV图像”方向),是于蚂蚁集团举办的“外滩大会-全球Deepfake攻防挑战赛”开展的实践学习——适合想入门、了解并实践,关于深度学习和计算机视觉方向的学习者参与。此次学习活动的速通手册如下:从零入门CV图像竞赛(Deepf......
  • 算法学习笔记(8.6)-编辑距离问题
    目录Question:动态规划思路:第一步:思考每轮的决策,定义状态,从而得到dp表第二步:找出最优子结构,进而推导出状态转移方程第三步:确定边界条件和状态转移顺序代码实现:图例:空间优化:代码如下编辑距离,也称为Levenshtein距离,指两个字符串之间互相转化的最少修改次数,通常用于在信......