博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 5441 Travel (离线dsu)
阅读量:5070 次
发布时间:2019-06-12

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

<>

 

题目大意:

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

解题分析:

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

#include 
using namespace std;const int N = 1e5+5 , M = 5e3+5;#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
>T; while(T--){ scanf("%d%d%d",&n,&m,&k); REP(i,0,n)fa[i]=i,rk[i]=1; REP(i,1,m)scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].val); sort(e+1,e+1+m); REP(i,1,k)scanf("%d",&q[i].val),q[i].id=i; sort(q+1,q+1+k,cmp); ans=0; int loc=1; REP(i,1,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,1,k){ printf("%lld\n",res[i]); } }}

 

转载于:https://www.cnblogs.com/00isok/p/10915386.html

你可能感兴趣的文章
Beta 冲刺 六
查看>>
公司python入职培训流程
查看>>
[JSOI2008]最大数
查看>>
__asm__ __volatile__("": : :"memory")
查看>>
Kubernetes存储之Persistent Volumes简介
查看>>
[bzoj3343] 教主的魔法
查看>>
[51nod1299]监狱逃离
查看>>
Python3学习笔记十八
查看>>
C#删除程序自身【总结】
查看>>
String关键字
查看>>
移植u-boot-2010.03问题 --- raise: Signal # 8 caught
查看>>
POJ2228 Naptime
查看>>
bzoj 3566 [SHOI2014]概率充电器——树型
查看>>
洛谷 1344 [USACO4.4]追查坏牛奶Pollutant Control——最大流
查看>>
mysql 5.7.20 server status 是stopped的解决办法
查看>>
Luogu3676 小清新数据结构题(树链剖分+线段树)
查看>>
探索javascript----滚轮事件的兼容
查看>>
接口测试
查看>>
Dropping tests POJ - 2976 (01分数规划)
查看>>
.Net cxy 提高效率
查看>>