首页 > 其他 > 详细

【bzoj 4046 加强版】Pork barrel

时间:2019-08-15 16:30:57      阅读:73      评论:0      收藏:0      [点我收藏+]

刚考完以为是神仙题……后来发现好像挺蠢的…… QwQ

题意

  给你一张 \(n\) 个点 \(m\) 条边的无向图(不一定连通),有 \(q\) 组询问,每组询问给你 \(2\) 个正整数 \(l,h\),你需要选出一些边,满足边权都在 \([l,r]\) 范围内,连通尽量多的点对,在此基础上使得边权和最小。
  \(n,m,q\le 10^5,\space w_i\le 10^4\)(原题 \(n\le 1000,\space q\le 10^6\)

题解

  动态最小生成树(汗)
  我怎么什么都没写过
  考场上花 10 分钟写了 5 分 \(O(qn)\) 暴力就滚了

  假设这题可以离线,先将所有边按权值从大到小排序。
  依次判断每条边的两端点是否连通,若未连通则连上(这样连通的点对数必定增多),若连通则替换掉一条树上这两点之间的简单路径上 权值最大的一条边(\(\text{cut}\) 一下权值最大的那条边,\(\text{link}\) 一下这条边)。
  加边的同时动态处理询问。对于一组询问 \([L,R]\),若当前插入的边的权值是 \(\ge L\) 的最小值,则我们决定处理这组询问。此时最小生成(森林)上的所有边权都 \(\ge L\),我们直接扔掉所有权值 \(\gt R\) 的边,剩余的边的权值和就是答案。发现边权很小,所以可以用树状数组动态维护最小生成(森林)中权值为 \(i\) 的边数,单点修改,区间查询。

  考虑在线,我想这题时居然忘了加边和询问是分开的了……
  依然把边按权值从大到小排序,依次加入最小生成(森林),然后在主席树的第 \(w_i\) 个版本上单点修改即可,在线处理询问 \([L,R]\) 时在主席树的第 \(L\) 个版本上区间查询即可。
  复杂度 \(O(n\log n)\)

  仔细想想好像确实挺水的,所以还是我太菜了

【bzoj 4046 加强版】Pork barrel

原文:https://www.cnblogs.com/scx2015noip-as-php/p/bzoj4046.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!