Codeforces 1213G Path Queries
中文题面
给一棵无根树,每条边有边权。然后q个询问,每次询问给个w,求树上有多少对点之间的路径上的最大值小于等于w。
解题思路
离线。先把所有边按照边长升序排序,再把所有询问按照w升序排序。
之后从小到大处理每个询问。对于一个询问,首先由于询问已经排好序了,所以前一个答案是之前加的边对于答案的贡献,我们就先把上一个询问的答案直接复制过来,之后把小于等于这个询问的w的所有边加入到树上,然后并查集更新答案:每加一条边,对答案产生的贡献是“这条边两端的连通块”大小之积。
之后恢复顺序,输出,没了。
虚拟赛过程中看见这题的时候,想不到用并查集,而是想着深搜(类似CF1118 F1),对于一条边,讨论它下方的子树和上方树的其他部分的情况,但上方没想出来怎么处理,因为可能上方存在权值更大的边,不能一整个乘下去……然后想到点分治树分治啥的,全是xjb想……去看了这题的标签,dsu(并查集)、分治、排序。开始不知道啥是dsu,去百度找到了个dsu on tree
,点进去发现时启发式合并,和这个没啥关系……
源代码
#include<cstdio>
#include<algorithm>
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<b.w;}
bool cmp2(Que & a,Que & b){return a.id<b.id;}
struct Edge{
int u,v,w;
bool operator < (const Edge & x)const{
return w<x.w;
}
}e[MAXN];
int fa[MAXN],sz[MAXN];
int find(int x)
{
return fa[x]=fa[x]==x?x:find(fa[x]);
}
void uni(int x,int y)
{
x=find(x);
y=find(y);
fa[x]=y;
sz[x]+=sz[y];
sz[y]=sz[x];
}
int main()
{
// freopen("test.in","r",stdin);
scanf("%d%d",&n,&m);
for(int i=1;i<n;i++)
{
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
}
for(int i=0;i<m;i++)
{
scanf("%d",&q[i].w);
q[i].id=i;
q[i].ans=0;
}
std::sort(e+1,e+n);
std::sort(q,q+m,cmp1);
for(int i=1;i<=n;i++) fa[i]=i,sz[i]=1;
for(int i=0,pos=1;i<m;i++)
{
q[i].ans=q[i-1].ans;
while(pos<n&&e[pos].w<=q[i].w)
{
int u=e[pos].u,v=e[pos].v;
q[i].ans+=1LL*sz[find(u)]*sz[find(v)];
uni(u,v);
pos++;
}
}
std::sort(q,q+m,cmp2);
for(int i=0;i<m;i++) printf("%lld ",q[i].ans);
return 0;
}
Codeforces 1213G Path Queries的更多相关文章
- [Codeforces]817F. MEX Queries 离散化+线段树维护
[Codeforces]817F. MEX Queries You are given a set of integer numbers, initially it is empty. You sho ...
- 【CF938G】Shortest Path Queries(线段树分治,并查集,线性基)
[CF938G]Shortest Path Queries(线段树分治,并查集,线性基) 题面 CF 洛谷 题解 吼题啊. 对于每个边,我们用一个\(map\)维护它出现的时间, 发现询问单点,边的出 ...
- Codeforces 954H Path Counting 【DP计数】*
Codeforces 954H Path Counting LINK 题目大意:给你一棵n层的树,第i层的每个节点有a[i]个儿子节点,然后问你树上的简单路径中长度在1~n*2-2之间的每个有多少条 ...
- CF938G Shortest Path Queries 和 CF576E Painting Edges
这两道都用到了线段树分治和按秩合并可撤销并查集. Shortest Path Queries 给出一个连通带权无向图,边有边权,要求支持 q 个操作: x y d 在原图中加入一条 x 到 y 权值为 ...
- [Codeforces 266E]More Queries to Array...(线段树+二项式定理)
[Codeforces 266E]More Queries to Array...(线段树+二项式定理) 题面 维护一个长度为\(n\)的序列\(a\),\(m\)个操作 区间赋值为\(x\) 查询\ ...
- Codeforces 938G Shortest Path Queries [分治,线性基,并查集]
洛谷 Codeforces 分治的题目,或者说分治的思想,是非常灵活多变的. 所以对我这种智商低的选手特别不友好 脑子不好使怎么办?多做题吧-- 前置知识 线性基是你必须会的,不然这题不可做. 推荐再 ...
- CodeForces - Path Queries (并查集+离线查询)
题目:https://vjudge.net/contest/323699#problem/A 题意:给你一棵树,然后有m个查询,每次查询问一条路径最大边小于给定查询的数量 思路:首先我们看到,我们其实 ...
- Codeforces Round #582 (Div. 3) G. Path Queries (并查集计数)
题意:给你带边权的树,有\(m\)次询问,每次询问有多少点对\((u,v)\)之间简单路径上的最大边权不超过\(q_i\). 题解:真的想不到用最小生成树来写啊.... 我们对边权排序,然后再对询问的 ...
- Codeforces 797E - Array Queries
E. Array Queries 题目链接:http://codeforces.com/problemset/problem/797/E time limit per test 2 seconds m ...
随机推荐
- Struts 2访问Servlet API
在servlet中可以通过servlet API来获取Session,在Struts中如何获取Session呢? 解析:将用户名放入session 两种方案 1. 与Servlet API解耦的访问方 ...
- 什么是云数据库 HBase 版
云数据库 HBase 版(ApsaraDB for HBase)是基于 Hadoop 的一个分布式数据库,支持海量的PB级的大数据存储,适用于高吞吐的随机读写的场景.目前在阿里内部有数百个集群,100 ...
- springmvc的MultipartFile参数如果不上传文件报错的问题
@RequestMapping(value = "/updateInformation",method = RequestMethod.POST) @ResponseBody pu ...
- Django进阶(一)
目录 choice参数 MTV与MVC模型 Ajax Ajax传json数据 Ajax传file数据 contentType前后端传输数据编码 ajax + sweetalert 序列化组件 补充 c ...
- USBIP源码分析
简介 在普通的电脑上,想使用USB设备,必须将插入到主机.USBIP却可以通过网络,让主机访问其他主机上的外部设备,而用户程序完全感知不到区别. usbip的文章在这里:https://pdfs.se ...
- Java Web开发技术教程入门-自定义标签
回顾: 昨天了解了JSP开发的两种模式Model1和Model2模式.Model1采用JSP+JavaBean技术开发Web应用,它比较适合小规模应用的开发,效率较高,易于实现.但由于在Model1中 ...
- sql server len函数
len函数 --返回字符表达式中的字符数 --如果字符串中包含前导空格和尾随空格,则函数将它们包含在内 --LEN对相同的单字节和双字节字符串返回相同的值 --示例:select LEN('no'), ...
- Docker:Swarm + Stack 一站式部署容器集群
参考1 参考2 1.注意docker的版本,yum默认安装的版本比较低,可能出现 unsupported Compose file version: 3.7 docker版本升级 2.docker-c ...
- 109、Secret的使用场景 (Swarm16)
参考https://www.cnblogs.com/CloudMan6/p/8082429.html 我们可以用secret管理任何敏感数据.这些敏感数据是容器在运行时需要的.同时我们又不想把这些 ...
- jQuery效果--隐藏和显示
jQuery hide() 和 show() 通过 jQuery,您可以使用 hide() 和 show() 方法来隐藏和显示 HTML 元素: $("#hide").click( ...