题意描述:简单的讲就是,给你一张无向图,求有多少条路径使得路径上的花费小于L,这里路径上的花费是这样规定的,a、b两点之间的多条路径中的最长的边最小值!

思路:这题目有多个询问,肯定要用离线输出。思路的话,我们只需要从小到达枚举边的长度,如果两个并查集没有连通,那么联通之后的路径条数就应该是(num[a]*num[b])........

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. int father[10005],num[10005];
  7. struct node
  8. {
  9. int v1,v2;
  10. int dis;
  11. }s[50005];
  12. struct node1
  13. {
  14. int ans;
  15. int sum;
  16. int id;
  17. }t[10005];
  18. int cmp(const node a,const node b)
  19. {
  20. if(a.dis<b.dis)
  21. return 1;
  22. else
  23. return 0;
  24. }
  25. int cmp1(const node1 a,const node1 b)
  26. {
  27. if(a.sum<b.sum)
  28. return 1;
  29. else
  30. return 0;
  31. }
  32. int cmp2(const node1 a,const node1 b)
  33. {
  34. if(a.id<b.id)
  35. return 1;
  36. else
  37. return 0;
  38. }
  39. int find(int x)
  40. {
  41. int root,i=x;
  42. while(x!=father[x])
  43. x=father[x];
  44. root=x;
  45. x=i;
  46. while(x!=father[x])
  47. {
  48. i=father[x];
  49. father[x]=root;
  50. num[root]+=num[x];
  51. num[x]=0;
  52. x=i;
  53. }
  54. return root;
  55. }
  56. int liantong(int x,int y)
  57. {
  58. father[x]=y;
  59. int k=num[y]*num[x];
  60. num[y]+=num[x];
  61. num[x]=0;
  62. return k;
  63. }
  64. int main()
  65. {
  66. int n,m,q;
  67. while(scanf("%d%d%d",&n,&m,&q)>0)
  68. {
  69. for(int i=0;i<=n;i++)
  70. {
  71. father[i]=i;
  72. num[i]=1;
  73. }
  74. int maxn=0;
  75. for(int i=0;i<m;i++)
  76. {
  77. scanf("%d%d%d",&s[i].v1,&s[i].v2,&s[i].dis);
  78. maxn=s[i].dis;
  79. }
  80. sort(s,s+m,cmp);
  81. //int q;
  82. //scanf("%d",&q);
  83. //q=
  84. for(int i=0;i<q;i++)
  85. {
  86. scanf("%d",&t[i].sum);
  87. t[i].id=i;
  88. }
  89. sort(t,t+q,cmp1);
  90. int j=0;
  91. for(int i=0;i<q;i++)
  92. {
  93. if(i==0)
  94. t[i].ans=0;
  95. else
  96. t[i].ans=t[i-1].ans;
  97. while(j<m&&t[i].sum>=s[j].dis)
  98. {
  99. int tmp=s[j].v1;
  100. int tmp1=s[j].v2;
  101. tmp=find(tmp);
  102. tmp1=find(tmp1);
  103. if(tmp!=tmp1)
  104. {
  105. t[i].ans+=liantong(tmp,tmp1);
  106. }
  107. j++;
  108. }
  109. }
  110. sort(t,t+q,cmp2);
  111. for(int i=0;i<q;i++)
  112. printf("%d\n",t[i].ans);
  113. }
  114. return 0;
  115. }

hdu3938(最小生成树,推荐)的更多相关文章

  1. POJ推荐50题

    此文来自北京邮电大学ACM-ICPC集训队 此50题在本博客均有代码,可以在左侧的搜索框中搜索题号查看代码. 以下是原文: POJ推荐50题1.标记“难”和“稍难”的题目可以看看,思考一下,不做要求, ...

  2. 树的Prufer 编码和最小生成树计数

      Prufer数列 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2.它可以通过简单的迭代方 ...

  3. ACM计算几何题目推荐

    //第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...

  4. 最小生成树——Prim算法和Kruskal算法

    洛谷P3366 最小生成树板子题 这篇博客介绍两个算法:Prim算法和Kruskal算法,两个算法各有优劣 一般来说当图比较稀疏的时候,Kruskal算法比较快 而当图很密集,Prim算法就大显身手了 ...

  5. 最小生成树(prime算法 & kruskal算法)和 最短路径算法(floyd算法 & dijkstra算法)

    一.主要内容: 介绍图论中两大经典问题:最小生成树问题以及最短路径问题,以及给出解决每个问题的两种不同算法. 其中最小生成树问题可参考以下题目: 题目1012:畅通工程 http://ac.jobdu ...

  6. 最小生成树 & 洛谷P3366【模板】最小生成树 & 洛谷P2820 局域网

    嗯... 理解生成树的概念: 在一幅图中将所有n个点连接起来的n-1条边所形成的树. 最小生成树: 边权之和最小的生成树. 最小瓶颈生成树: 对于带权图,最大权值最小的生成树. 如何操作? 1.Pri ...

  7. 最小生成树的kruskal、prim算法

    kruskal算法和prim算法 都说 kruskal是加边法,prim是加点法 这篇解释也不错:这篇 1.kruskal算法 因为是加边法,所以这个方法比较合适稀疏图.要码这个需要先懂并查集.因为我 ...

  8. 最小生成树算法 prim kruskal两种算法实现 HDU-1863 畅通工程

    最小生成树 通俗解释:一个连通图,可将这个连通图删减任意条边,仍然保持连通图的状态并且所有边权值加起来的总和使其达到最小.这就是最小生成树 可以参考下图,便于理解 原来的图: 最小生成树(蓝色线): ...

  9. POJ 2031 Building a Space Station【经典最小生成树】

    链接: http://poj.org/problem?id=2031 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...

随机推荐

  1. ROS学习(五)—— 编译ROS Package

    提前准备: 记得事先source你的环境配置(setup)文件,在Ubuntu中的操作指令如下. source /opt/ros/kinetic/setup.bash 一.使用catkin_make ...

  2. 在iOS开发的Quartz2D使用中实现图片剪切和截屏功能

    原文  http://www.jb51.net/article/75671.htm 图片剪切一.使用Quartz2D完成图片剪切1.把图片显示在自定义的view中先把图片绘制到view上.按照原始大小 ...

  3. kafka中处理超大消息的一些处理

       Kafka设计的初衷是迅速处理短小的消息,一般10K大小的消息吞吐性能最好(可参见LinkedIn的kafka性能测试).但有时候,我们需要处理更大的消息,比如XML文档或JSON内容,一个消息 ...

  4. java 高性能读模式(译)

    原文地址:http://tutorials.jenkov.com/java-performance/read-patterns.html 好久没翻译了,逛知乎,无意间发现的一个链接,写的太好了,而且内 ...

  5. js中文乱码问题,编码设为utf-8,但还是乱码问题。

    dw中编辑js的时候使用另存为菜单,在存储的时候勾选上一个叫[包括Unicode签名(BOM)(S)]的选项,然后存储.再次在浏览器源码中查看的时候js的中文就正常显示了,查看属性,编码也是UTF-8 ...

  6. SharePoint 2013 创建 Site Collection

    在之前的文章中,通过SharePoint Central Administration 创建了Web Application.在这篇文章中将继续SharePoint 2013之旅——还是以Step B ...

  7. FreeSWITCH取消Digest校验流程

    方法一.通过使用acl配置 <list name="domains" default="deny"> <!-- domain= is spec ...

  8. POJ 2115:C Looooops

    C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19536   Accepted: 5204 Descr ...

  9. Javascript MVC 学习笔记(一) 模型和数据

    写在前面 近期在看<MVC的Javascript富应用开发>一书.本来是抱着一口气读完的想法去看的.结果才看了一点就傻眼了:太多不懂的地方了. 仅仅好看一点查一点,一点一点往下看吧,进度虽 ...

  10. VS2005快捷键大全

    快捷键功能 CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL + SHIFT + O打开项目 CTRL + SHIFT + C显示类视图 ...