<题目链接>

题目大意:
$n$个点,$m$条边,每条边具有对应的权值,然后进行$k$次询问,每次询问给定一个值,所有权值小于等于这个的边所对应的点能够相连,问每次询问,这些能够相互到达的点所构成的无序点对的个数。

解题分析:
数据比较大,每次询问暴力加边肯定超时,所以考虑离线来搞。进行离线查询,将查询按权值从小到大排序,然后每次询问就不需要全部重新添边,只需要增加多余的那一部分即可。

#include <bits/stdc++.h>
using namespace std; const int N = 1e5+ , M = 5e3+;
#define REP(i,s,t) for(int i=s;i<=t;i++)
struct Edge{
int u,v,val;
bool operator < (const Edge&tmp)const{ return val<tmp.val; }
}e[N]; struct Que{ int id,val; }q[M];
bool cmp(Que a,Que b){ return a.val<b.val; } typedef long long ll;
int n,m,k;
int rk[N],fa[N];
ll ans,res[N]; int find(int x){ return x==fa[x]?x:fa[x]=find(fa[x]); } inline void Union(int u,int v){
int f1=find(u),f2=find(v);
if(f1!=f2){
ans+=rk[f1]*rk[f2]*; //贡献是两个集合点数的乘积
rk[f1]+=rk[f2];
fa[f2]=f1;
}
}
int main(){
int T;cin>>T;
while(T--){
scanf("%d%d%d",&n,&m,&k);
REP(i,,n)fa[i]=i,rk[i]=;
REP(i,,m)scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].val);
sort(e+,e++m);
REP(i,,k)scanf("%d",&q[i].val),q[i].id=i;
sort(q+,q++k,cmp);
ans=;
int loc=;
REP(i,,k){
while(loc<=m && e[loc].val<=q[i].val){
Union(e[loc].u,e[loc].v);
loc++;
}
res[q[i].id]=ans;
}
REP(i,,k){
printf("%lld\n",res[i]);
}
}
}

HDU 5441 Travel (离线dsu)的更多相关文章

  1. hdu 5441 Travel 离线带权并查集

    Travel Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5441 De ...

  2. hdu 5441 travel 离线+带权并查集

    Time Limit: 1500/1000 MS (Java/Others)  Memory Limit: 131072/131072 K (Java/Others) Problem Descript ...

  3. HDU 5441 Travel(并查集+统计节点个数)

    http://acm.hdu.edu.cn/showproblem.php?pid=5441 题意:给出一个图,每条边有一个距离,现在有多个询问,每个询问有一个距离值d,对于每一个询问,计算出有多少点 ...

  4. hdu 5441 Travel (2015长春网赛)

    http://acm.hdu.edu.cn/showproblem.php?pid=5441 题目大意是给一个n个城市(点)m条路线(边)的双向的路线图,每条路线有时间值(带权图),然后q个询问,每个 ...

  5. HDU 5441 Travel

    Travel Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Descrip ...

  6. hdu 5441 Travel(并查集)

    Problem Description Jack likes to travel around the world, but he doesn’t like to wait. Now, he is t ...

  7. HDU 5441——Travel——————【并查集+二分查界限】

    Travel Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Su ...

  8. HDU 5441 Travel (并查集+数学+计数)

    题意:给你一个带权的无向图,然后q(q≤5000)次询问,问有多少对城市(城市对(u,v)与(v,u)算不同的城市对,而且u≠v)之间的边的长度不超过d(如果城市u到城市v途经城市w, 那么需要城市u ...

  9. (并查集)Travel -- hdu -- 5441(2015 ACM/ICPC Asia Regional Changchun Online )

    http://acm.hdu.edu.cn/showproblem.php?pid=5441 Travel Time Limit: 1500/1000 MS (Java/Others)    Memo ...

随机推荐

  1. ES常见错误

    1. Request cannot be executed; I/O reactor status: STOPPED RestClient被关闭了 2. SpringBoot启动后 Stopping ...

  2. Maven中添加Jetty服务器配置

    <project> <!--其它配置--> <build> <plugins> <plugin> <groupId>org.mo ...

  3. poj 1269 Intersecting Lines(直线相交)

    Intersecting Lines Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8637   Accepted: 391 ...

  4. flask之注册功能

    一:注册功能 1:前端准备表单 # 前端代码 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  5. 026:if标签使用详解

    if标签使用详解: if 标签: if 标签相当于 Python 中的 if 语句,有 elif 和 else 相对应,但是所有的标签都需要用标签符号  {%  %}  进行包裹. if 标签中可以使 ...

  6. dict以及defaultdict的简单使用

    先看一个需求 from collections import defaultdict """ 需求: 统计user_list中字母出现的次数 ""&q ...

  7. Web 开发中很实用的效果【源码下载】

    网页特效下载 引用地址:http://www.yyyweb.com/350.html 超炫的页面切换动画效果 今天我们想与大家分享一组创意的页面切换熊效果集合.我们已经在示例中罗列了一组动画,可以被应 ...

  8. Linux shell 归纳之 ~/. 是什么意思

    假设用户名目录是:/home/test ~> cat ~/.profile ~ 是代表用户名目录/home/test/ .是代表隐藏文件, profile 就是home/test目录下的隐藏文件

  9. linux ( CentOS 7)下Tengine(nginx)的安装与配置

    TengineTengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.它的目的是打造一个高效.安全的Web平台. 使用root用户安装 ...

  10. mybatis缓存机制(转)

    缓存在互联网系统中是非常重要的, 其主要作用是将数据保存到内存中, 当用户查询数据 时, 优先从缓存容器中获取数据,而不是频繁地从数据库中查询数据,从而提高查询性能.目 前流行的缓存服务器有Mongo ...