JZOJ6371. 【NOIP2019模拟2019.9.28】基础图论练习题

本文提出了一种处理动态无向图中桥的数量更新问题的高效算法,通过使用线段树来跟踪边的加入和删除操作,实现O(nlogn)的时间复杂度。算法巧妙地利用虚树结构来优化计算过程,避免了对于每个节点的暴力计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先打题解(思路)再打代码,因为这题实在挺难打。

Decription

  • 给定一个无向图,并且有q次操作,每一次加上或删去一条边。
  • 在操作前以及每一个操作后询问无向图中桥的个数。
  • n<=2e5,q<=4e5

Solution

  • 由于删除操作不好做,所以我们考虑只有加入操作的时候。
  • 如果一条边在时间[l,r]中存在,那么就将它加到线段树的对应区间中。
  • 考虑每条边在线段树上完全覆盖的最大区间中再加入。
  • 那么就有nlogn个区间有加入的操作。
  • 但是我们注意到点数可能会很大,也就是说我们不能暴力对于每一个节点都从上到下计算覆盖它的边的影响。
  • 考虑将加了边后的图缩成一个个的边双。再根据当前当前线段树上节点以及它的子树节点上挂的边中关系到的点建一颗虚树。
  • 其他的边双中的边如果在虚树上的两个点间就会对其的边权产生贡献。
  • 如果完全不会影响虚树中的点就直接统计贡献。
  • 这样的话从根往下维护边双的图就好了。
  • 虚树构建可以暴力建O(区间长度)
  • 复杂度O(nlogn)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值