<题目链接>

题目大意:
$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. day02-css

    技术分析 HTML的块标签: div标签: 默认占一行,自动换行 span标签: 内容显示在同一行 CSS概述: Cascading Style Sheets : 层叠样式表 主要用作用: 用来美化我 ...

  2. SQL语句分类

    SQL Structured Query Language SQL是结构化查询语言,是一种用来操作RDBMS的数据库语言,当前关系型数据库都支持使用SQL语言进行操作,也就是说可以通过 SQL 操作 ...

  3. 文献管理工具mendeley登录问题

    mendeley是一个文献管理工具,但是有一个让人诟病的地方是第一次登录,容易出现问题: 1.点击登录按钮后,报出红色警告 这个百度的问题中,经常提到的是这个,去点击红色错误的链接,通常应该是需要fa ...

  4. keepalived的配置文件

    ! Configuration File for keepalived global_defs { notification_email { # acassen@firewall.loc # fail ...

  5. P1864 [NOI2009]二叉查找树

    链接P1864 [NOI2009]二叉查找树 这题还是蛮难的--是我菜. 题目描述中的一大堆其实就是在描述\(treap.\),考虑\(treap\)的一些性质: 首先不管怎么转,中序遍历是确定的,所 ...

  6. JUC并发工具类

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11449367.html java.util.concurrent及其子包,集中了Java并发的各种基础 ...

  7. 英语单词character

    来源——tr帮助说明 TR() User Commands TR() NAME tr - translate or delete characters SYNOPSIS tr [OPTION]... ...

  8. Anaconda概念和使用方法

    Anaconda概述 Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存.切 ...

  9. WINDOWS2008server安全策略设置

    一.防止黑客或恶意程序暴力破解我的系统密码 答: 暴力破解Windows密码实质上是通过穷举算法来实现,尤其是密码过于简单的系统,暴力破解的方法还是比较实用的.有一点需要我们注意,这个问题的关键在于W ...

  10. [CSP-S模拟测试]:甜圈(线段树)

    题目描述 $D$先生,是一个了不起的甜甜圈制造商.今天,他的厨房准备在日出之前制作甜甜圈.$D$先生瞬间完成了$N$个油炸圈饼.但是,这些油炸圈饼得先经过各种装饰任务才可以成为甜甜圈销售:填充奶油,浸 ...