博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 1213G Path Queries
阅读量:5312 次
发布时间:2019-06-14

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

中文题面

给一棵无根树,每条边有边权。然后q个询问,每次询问给个w,求树上有多少对点之间的路径上的最大值小于等于w。

解题思路

离线。先把所有边按照边长升序排序,再把所有询问按照w升序排序。

之后从小到大处理每个询问。对于一个询问,首先由于询问已经排好序了,所以前一个答案是之前加的边对于答案的贡献,我们就先把上一个询问的答案直接复制过来,之后把小于等于这个询问的w的所有边加入到树上,然后并查集更新答案:每加一条边,对答案产生的贡献是“这条边两端的连通块”大小之积。

之后恢复顺序,输出,没了。

虚拟赛过程中看见这题的时候,想不到用并查集,而是想着深搜(类似),对于一条边,讨论它下方的子树和上方树的其他部分的情况,但上方没想出来怎么处理,因为可能上方存在权值更大的边,不能一整个乘下去……然后想到点分治树分治啥的,全是xjb想……去看了这题的标签,dsu(并查集)、分治、排序。开始不知道啥是dsu,去百度找到了个dsu on tree,点进去发现时启发式合并,和这个没啥关系……

源代码

#include
#include
const int MAXN=2e5+5;int n,m; struct Que{ int id,w; long long ans;}q[MAXN];bool cmp1(Que & a,Que & b){return a.w

转载于:https://www.cnblogs.com/wawcac-blog/p/11466151.html

你可能感兴趣的文章
16下学期进度条2
查看>>
Could not resolve view with name '***' in servlet with name 'dispatcher'
查看>>
Chapter 3 Phenomenon——12
查看>>
和小哥哥一起刷洛谷(1)
查看>>
遇麻烦,Win7+Ubuntu12.10+Archlinux12.10 +grub
查看>>
SqlBulkCopy大批量导入数据
查看>>
pandas 修改指定列中所有内容
查看>>
「 Luogu P2285 」打鼹鼠
查看>>
lua语言入门之Sublime Text设置lua的Build System
查看>>
vue.js基础
查看>>
电脑的自带图标的显示
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
C++ 删除字符串的两种实现方式
查看>>
ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
查看>>
Java抽象类和接口的比较
查看>>
开发进度一
查看>>
MyBaits学习
查看>>
管道,数据共享,进程池
查看>>
CSS
查看>>
[LeetCode] 55. Jump Game_ Medium tag: Dynamic Programming
查看>>