题意

给我们一个图 给出这个图的n个点 和m个边和权值 然后再分别给我们q个查询 每个查询给一个x
让我们在这个图中找出多少个不同的有序对 使得从x到y的最大权值不超过x
n≤20000,m≤100000,q≤5000.

分析

20000个点 1000ms 暴力肯定不行
看似这道题像是个图论的题
嘿嘿嘿 其实。。。
我们看 如何找出符合题目条件所需要的对数呢
我们如果对任意一个查询 我们对一条新的边考虑如果这条新的边其权值满足当前查询 那么就把他算进来 那么我们要继续找边 我们肯定不能找大的边
因为大的边肯定满足不了当前查询 所以我们还是要从小边找起来
所以我们要对边进行排序
然后对一个查询 我们也最好从小的查询搞起来
因为小查询的结果一定满足大查询的结果
如果不要重复计算 我们就需要从小的查询开始
那么这里就考虑离线处理
一个小的查询的结果是可以转移到大的查询的结果 这样可以更迅速的把q个查询算出来
确定了这两点 我们再看如何把一个查询的值求出来
我们不是要枚举边么 那么如何才能做到有效统计并转移小查询的结果给大查询呢?
假设我们已经找到了好几个符合条件的边
有些边是组成一个联通块 有些边组成不同联通块
对于符合条件的联通块 我们一定要对这个块进行计数 就是从这个块中的数量中选出两个元素来的所有可能
如果来了一条新边 这条边 有两种可能1 这条边属于某个联通块2 此边形成新的联通块
情况1 : 我们就需要把这条边的新点加进去 也就是把当前新点的数量n1 * 原来联通块中的旧点n2 *2 (双向)
情况2 : 那么我们就需要把这个新块 同情况一的算法算一下
累计结果
下一次查询可以重复利用
那么这里我们就可以考虑并查集了
对于一个并查集元素 我们记录这个点的father 和 本块内的数量
初始化f = 自己 数量 = 1 没得到一个新边我们就查询边的两头的点的父亲是否为同一个 不同就合并 并累计数量
问题就解决了
这道题还是考虑一个如何顺序化考虑解 如何把符合条件的联通块计数问题转化为边的问题 如何把小查询结果转移到大的查询的问题

CODE

#include<bits/stdc++.h>
using namespace std;
struct node{int num,f;
}n[20010];
int N,M,Q,ans[5010];
struct edge{int s,e,w;
}e[100010];
bool cmp(edge a,edge b){return a.w<b.w;//对于edge把权值小的放前面
}
struct ques{int id,que;bool operator<(const ques &a){return que<a.que;//q值小的排前面 }
}Qe[5010];
int find(int x){int j=x;while(j!=n[j].f){j = n[j].f;}int i,k=x;while(k!=n[k].f){i = n[k].f;n[k].f=j;k = i;}return j;
}
int main()
{int t;scanf("%d",&t);while(t--){scanf("%d%d%d",&N,&M,&Q);memset(ans+1,0,sizeof(int)*Q);for(int i=1;i<=N;i++){n[i].num=1;n[i].f=i;       }for(int i=1;i<=M;i++){scanf("%d%d%d",&e[i].s,&e[i].e,&e[i].w);}sort(e+1,e+1+M,cmp);for(int i=1;i<=Q;i++)scanf("%d",&Qe[i].que),Qe[i].id = i;sort(Qe+1,Qe+1+Q);int ce=1;//边记录位置 int cnt=0;for(int i=1; i<=Q ;i++){//枚举q  for(; ce<=M&&e[ce].w<=Qe[i].que ;ce++){// ce<=M leakint f1 = find(e[ce].s);int f2 = find(e[ce].e);if(f1!=f2){n[f2].f=f1;cnt+=n[f1].num*n[f2].num*2;    n[f1].num+=n[f2].num;}} ans[Qe[i].id]+=cnt;         } for(int i=1;i<=Q;i++)printf("%d\n",ans[i]);}return 0;
} 

HDU - 5441 Travel 离线处理+并查集相关推荐

  1. hdu 5441 Travel(Kruskal+离线)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5441 题意: 给定N个顶点,M条边的一个无向图,Q个询问. 对于每个询问x,从a,b的路径上各边的最大 ...

  2. How Many Answers Are Wrong HDU - 3038(带权并查集经典题,满满的都是注释)

    How Many Answers Are Wrong HDU - 3038  点击打开链接 题意:现在有n个数(你并不知道这n个数是什么),m次查询,每次查询给出u,v,w.表示从第u个数到第v个数的 ...

  3. hdu 1232 畅通工程 最小生成树 并查集

    1232的连接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 #include <iostream>#include <cstdio& ...

  4. HDU 1213 How Many Tables 并查集 水~

    http://acm.hdu.edu.cn/showproblem.php?pid=1213 果然是需要我陪跑T T,禽兽工作人员还不让,哼,但还是陪跑了~ 啊,还有呀,明天校运会终于不用去了~耶耶耶 ...

  5. URAL1671 Anansi's Cobweb(离线做 + 并查集)

    传送门 大意:给出一个无向图,删除Q条边,每删除一次就询问一次目前的连通块的数目. 思路:离线搞, 把删边转换为加边,每加一次边,若两个顶点不连通就用并查集把着这两个连通块合并. 代码: #inclu ...

  6. HDU5441 Travel 有秩并查集

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

  7. hdu 3234 Exclusive-OR 题解(并查集,思维)

    该死的期末复习终于结束了... 暑假来了\color{#ff0000}{暑假来了}暑假来了!!! 所以我就珂以非常开心的写博客了. 原题链接: hdu 题意简述 多组数据.你有一个没有确定的数列.有一 ...

  8. HDU 1272 小希的迷宫 (并查集)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  9. hdu 1811 Rank of Tetris (并查集+拓扑排序)

    Problem - 1811 感觉这题的并查集以及拓扑排序并不难,但是做题的时候必须理解到矛盾(CONFLICT)与不确定(UNCERTAIN)直接的优先关系. 做这题的时候,构图什么的很简单,就是没 ...

最新文章

  1. 3d 自动生成物体_Adobe发布3D建模、AR内容生成应用Scantastic
  2. Puppeteer 学习笔记及基本用法
  3. 软件:9款超级实用的办公软件,值得收藏!
  4. 苹果白屏一直显示苹果_最新消息显示:苹果还要发新品
  5. prometheus命令_Prometheus入门教程(一):Prometheus 快速入门
  6. MySQL与PostgreSQL比较,哪个更好、我们该选用哪个?
  7. Java 继承学习笔记
  8. android刷机方法,介绍一种android的裸刷机方法(fastboot刷机实质)
  9. 【转】解决 canvas 在高清屏中绘制模糊的问题
  10. [Python] 索引序列函数:enumerate() / enumerate(sequence, start=0)
  11. POJ 3621:Sightseeing Cows(最优比率环)
  12. svn 迁移到git下全过程
  13. 人口各省预测模型matlab_MATLAB实验9河南省人口预测模型马尔萨斯人口模型.doc
  14. 信号与系统实验四 LTI系统的时域分析
  15. linux火狐插件目录,Firefox的插件目录在哪里?
  16. php 调用 百度句法分析,【原创源码】百度新版翻译API调用使用范例
  17. 解决浏览器被好123劫持主页的问题。
  18. iPhone苹果手机支付宝App Store消费红包怎么使用?
  19. indexedDB使用
  20. OSChinaiOS客户端源码剖析001(架构篇)

热门文章

  1. laravel 队列学习
  2. context:component-scan扫描使用的use-default-filters
  3. 寻找字符串中第一个仅仅出现一次打字符
  4. redis出现过多command 慢查询slowlog出现command命令
  5. [maven] springboot将jar包打包到指定目录
  6. Android Studio 项目断开SVN连接
  7. 未获取root手机抓包方法
  8. js 获取某iframe中document,浏览器兼容
  9. java ee项目部署到服务器上405,HTTP状态405 - HTTP POST方法不受此URL支持:采用的GlassFish服务器的NetBeans...
  10. python社区版可以用库么_应用Python,你不但能够得到出色的小区适用和普遍的库集...