题目:https://vjudge.net/contest/323699#problem/A

题意:给你一棵树,然后有m个查询,每次查询问一条路径最大边小于给定查询的数量

思路:首先我们看到,我们其实可以计算出每个边权小于查询的所有连通块,然后sum+C(n,2),对每个连通块都加上值,然后就是答案了,但是这里注意查询数很多,我们肯定不能O(n)遍历每个查询,但是思路肯定是计算联通块里组合数的数量,怎么处理呢,我们注意到,他这个边权是的值的大小和我的连通块的有关,我们是否可以利用之前求出来的值呢,答案是可以的,我们可以对查询排序,先求值小的,然后到后面查询的时候用之前的连通块继续延伸,总的所有查询的复杂度我们也只是遍历了一遍树,但是我们dfs不好去处理,这里我们怎么弄呢,连通块的算法就那么几个,dfs,并查集,tarjan,我们可以排除dfs和tarjan,那么我们就肯定是用并查集了,我们对边权也进行排序,然后我们就可以利用每个边进行联通块的合并,然后贡献怎么计算呢,我们会发现A连通块和B连通块,然后A连通块的路径对已经算完了,B连通块的路径对算完了,然后现在要求的一个点在A连通块,一个点在Bl连通块,贡献就加上A.size*B.size

#include<bits/stdc++.h>
#define maxn 200005
#define mod 1000000007
using namespace std;
typedef long long ll;
struct sss{
ll x,y,z;
}a[maxn];
struct eee{
ll id,value;
}cx[maxn];
ll n,m,q;
long long da[maxn];
ll siz[maxn];
ll f[maxn];
int cmp(struct sss x,struct sss y){
return x.z<y.z;
}
int cmp1(struct eee x,struct eee y){
return x.value<y.value;
}
int find(int x){
if(x==f[x]) return x;
else return f[x]=find(f[x]);
}
int main(){
scanf("%lld%lld",&n,&m);
for(int i=;i<n-;i++){
scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].z);
}
sort(a,a+n-,cmp);
for(int i=;i<m;i++){
cx[i].id=i;
scanf("%lld",&cx[i].value);
}
sort(cx,cx+m,cmp1);
for(int i=;i<=n;i++){
f[i]=i;
siz[i]=;
}
/*for(int i=0;i<n-1;i++){
printf("%d %d %d\n",a[i].x,a[i].y,a[i].z);
}*/
ll dex=;
ll sum=;
for(int i=;i<n-;i++){
if(a[i].z<=cx[dex].value){
int xx=find(a[i].x);
int yy=find(a[i].y);
if(xx!=yy){
sum+=siz[xx]*siz[yy];
f[yy]=xx;
siz[xx]+=siz[yy];
}
}
else{
da[cx[dex].id]=sum;
dex++;
if(dex==m) break;
i--;
}
}
for(;dex<m;dex++){
da[cx[dex].id]=sum;
}
for(int i=;i<m;i++){
printf("%lld ",da[i]);
}
}

CodeForces - Path Queries (并查集+离线查询)的更多相关文章

  1. Codeforces Round #582 (Div. 3) G. Path Queries (并查集计数)

    题意:给你带边权的树,有\(m\)次询问,每次询问有多少点对\((u,v)\)之间简单路径上的最大边权不超过\(q_i\). 题解:真的想不到用最小生成树来写啊.... 我们对边权排序,然后再对询问的 ...

  2. codeforces1213G Path Queries 并查集

    题意 给定n个结点的树,每条边有边权,有m个询问,每个询问给一个\(q_i\)输出树上有多少点对的简单路径上最大的边权不超过\(q_i\). 分析 用并查集维护点集,同时维护大小. 将所有边按边权排序 ...

  3. ACM学习历程—SNNUOJ 1110 传输网络((并查集 && 离线) || (线段树 && 时间戳))(2015陕西省大学生程序设计竞赛D题)

    Description Byteland国家的网络单向传输系统可以被看成是以首都 Bytetown为中心的有向树,一开始只有Bytetown建有基站,所有其他城市的信号都是从Bytetown传输过来的 ...

  4. ACM: hdu 1811 Rank of Tetris - 拓扑排序-并查集-离线

    hdu 1811 Rank of Tetris Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & % ...

  5. BZOJ5188: [Usaco2018 Jan]MooTube 并查集+离线处理

    BZOJ又不给题面... Luogu的翻译看不下去... 题意简述 有一个$n$个节点的树,边有权值,定义两个节点之间的距离为两点之间的路径上的最小边权 给你$Q$个询问,问你与点$v$的距离超过$k ...

  6. poj 2528 Mayor's posters 线段树 || 并查集 离线处理

    题目链接 题意 用不同颜色的线段覆盖数轴,问最终数轴上有多少种颜色? 注:只有最上面的线段能够被看到:即,如果有一条线段被其他的线段给完全覆盖住,则这个颜色是看不到的. 法一:线段树 按题意按顺序模拟 ...

  7. zoj3261 并查集离线处理

    Connections in Galaxy War Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%lld & ...

  8. zoj 3261 逆向并查集+离线处理

    题意:给出一些点,每个点有权值,然后有一些边,相连.无向的.然后有一些操作 链接:点我 query a.表示从a出发的能到达的所有点权值最大的点的编号(相同取编号最小,而且权值要比自己大) desto ...

  9. Codeforces 455C Civilization(并查集+dfs)

    题目链接:Codeforces 455C Civilization 题目大意:给定N.M和Q,N表示有N个城市,M条已经修好的路,修好的路是不能改变的.然后是Q次操作.操作分为两种.一种是查询城市x所 ...

随机推荐

  1. [转载]借助openssl解析ECC公钥

    void GetPubKey(const char* FilePath, char* PubKey) { unsigned ]; unsigned char *pTmp = NULL; FILE *f ...

  2. js中ajax请求返回的数据处理成数组后,局部变量赋值给全局变量后,为空

    第二步是想把ss的值扔给res_r,两个数组直接相等即可,可谁想到,取出来的值是空. 如图取出来的值是空. 我一脸懵逼,调试了些许时间,最后把ss遍历一下,在重新push进res_r 再来看效果,已经 ...

  3. idea的热部署

    1:先找到你要热部署的tomcat之后 ,在设置tomcat时  先选择 server,里面有On 'Update' action ()  和 On frame deactivation 这两项  都 ...

  4. Java8的I/O整理

    一.什么是I/O? Java的核心库java.io提供了全面的IO接口.包括:文件读写.标准设备输出等.Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入. 二.什 ...

  5. python3爬虫之urllib初探

    urllib主要包含request(请求模块).error(异常处理模块).parse(工具模块).robotparser(识别网站的robots.txt文件,是否允许爬取). request(请求模 ...

  6. 【题解】Oh My Holy FFF

    题目大意   有\(n\)个士兵(\(1 \leq n \leq 10^5\)),第\(i\)个士兵的身高为\(h_{i}\),现在要求把士兵按照原来的顺序分成连续的若干组,要求每组的士兵数量不超过\ ...

  7. 生产者消费者模型(JoinableQueue)

  8. 模板 - 线性递推BM

    模数是998244353的话好像NTT可以更快. #include<bits/stdc++.h> using namespace std; typedef long long ll; co ...

  9. Gradle打包问题Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0

    前言 使用gradle打包react native的时候,出现了如下报错,下面和大家说一下解决的具体办法 Deprecated Gradle features were used in this bu ...

  10. 基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1]

    基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1] 原文:基于Vue JS, Webpack 以及Material Design的渐进式web应 ...