题意:给N个点,还有另外m个点(当中仅仅能选K个)。求最短路。

思路:在SPFA的基础上,用一个数组来统计,在某点入队时(要拓展其它点了),若该点是m个点中的,则count【i】=原来的+1;若不是。则继承原来的。出队时候限制一下。若大于K了,就停止拓展。

原题:眼下在一个非常大的平面房间里有 n 个无线路由器,每一个无线路由器都

固定在某个点上。不论什么两个无线路由器仅仅要距离不超过 r 就能互相建立网

络连接。

除此以外。另有 m 个能够摆放无线路由器的位置。你能够在这些位置

中选择至多 k 个增设新的路由器。

你的目标是使得第 1 个路由器和第 2 个路由器之间的网络连接经过尽

量少的中转路由器。

请问在最优方案下中转路由器的最少个数是多少?

  1. #include<iostream>
  2. #include<vector>
  3. #include<queue>
  4. using namespace std;
  5. struct points
  6. {
  7. int x,y;
  8. };
  9. const int inf=0x3f3f3f3f;
  10. int n,m,k,r;
  11. vector<points>v; //点
  12. int map[205][205]; //图
  13. int dis(points a,points b) //距离
  14. {
  15. return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
  16. }
  17. void get_gra() //建图
  18. {
  19. for(int i=0;i<n+m;i++)
  20. {
  21. for(int j=i+1;j<n+m;j++)
  22. {
  23. if(dis(v[i],v[j])<=r*r)
  24. {
  25. map[j][i]=map[i][j]=1;
  26. }
  27. else
  28. {
  29. map[i][j]=map[j][i]=inf;
  30. }
  31. }
  32. }
  33. }
  34. int inq[205];
  35. int d[205];
  36. int count[205];
  37. void spfa()
  38. {
  39. queue<int>q;
  40. for(int i=0;i<n+m;i++)
  41. {
  42. count[i]=inq[i]=0;
  43. d[i]=inf;
  44. }
  45. q.push(0);inq[0]=1;d[0]=0;
  46. while(!q.empty())
  47. {
  48. int cur=q.front();
  49. q.pop();inq[cur]=0;
  50. if(count[cur]>k)continue; //限制。某点出队的次数
  51. for(int i=0;i<n+m;i++)
  52. {
  53. if(d[i]>d[cur]+map[cur][i])
  54. {
  55. d[i]=d[cur]+map[cur][i];
  56. if(inq[i]==0)
  57. {
  58. if(i>=n) //被限制次数的点,若是经过该点(该点入队),则加
  59. {
  60. count[i]=count[cur]+1;
  61. }
  62. else //一般的点继承
  63. {
  64. count[i]=count[cur];
  65. }
  66. inq[i]=1;
  67. q.push(i);
  68. }
  69. }
  70. }
  71.  
  72. }
  73.  
  74. }
  75. int main()
  76. {
  77. while(cin>>n>>m>>k>>r)
  78. {
  79. v.clear();
  80. points temp;
  81. for(int i=0;i<n+m;i++)
  82. {
  83. cin>>temp.x>>temp.y;
  84. v.push_back(temp);
  85. }
  86. get_gra();
  87. spfa();
  88. cout<<d[1]-1<<endl; //问的是中间有几个点
  89. }
  90. return 0;
  91. }

最短路中部分点仅仅能从中随意选取K个问题的更多相关文章

  1. 最短路中部分点只能从中任意选取K个问题

    题意:给N个点,还有另外m个点(其中只能选K个),求最短路. 思路:在SPFA的基础上,用一个数组来统计,在某点入队时(要拓展其他点了),若该点是m个点中的,则count[i]=原来的+1:若不是,则 ...

  2. 2019HDU多校第三场 K subsequence——最小费用最大流

    题意 给定一个 $n$ 个整数的数列,从中至多选取 $k$ 个上升子序列(一个元素最多被选一次),使得选取的元素和最大. 分析 考虑这个问题和经典网络流问题“最长不下降子序列”相似,我们考虑对这个建图 ...

  3. LeetCode382-链表随机节点

    原题链接:[382. 链表随机节点]:https://leetcode-cn.com/problems/linked-list-random-node/ 题目描述: 给定一个单链表,随机选择链表的一个 ...

  4. 仅仅有五行的Floyd最短路算法

    暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,例如以下图.为了节省经费以及方便计划旅程,小哼希望在出发之前知道随意两个城市之前的最短路程. 上图中有4个城市8条公路,公路上的数 ...

  5. [ACM] 最短路算法整理(bellman_ford , SPFA , floyed , dijkstra 思想,步骤及模板)

    以杭电2544题目为例 最短路 Problem Description 在每年的校赛里,全部进入决赛的同学都会获得一件非常美丽的t-shirt. 可是每当我们的工作人员把上百件的衣服从商店运回到赛场的 ...

  6. 算法学习笔记(三) 最短路 Dijkstra 和 Floyd 算法

    图论中一个经典问题就是求最短路.最为基础和最为经典的算法莫过于 Dijkstra 和 Floyd 算法,一个是贪心算法,一个是动态规划.这也是算法中的两大经典代表.用一个简单图在纸上一步一步演算,也是 ...

  7. HDU 2066-一个人的旅行(最短路Dijkstra)

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  8. FZU2169:shadow(最短路)

    Problem Description YL是shadow国的国王,shadow国有N个城市.为了节省开支,shadow国仅仅有N-1条道路,这N-1条道路使得N个城市连通. 某一年,shadow国发 ...

  9. POJ--2449--Remmarguts&#39; Date【dijkstra_heap+A*】第K短路

    链接:http://poj.org/problem?id=2449 题意:告诉你有n个顶点,m条边.并把这些边的信息告诉你:起点.终点.权值.再告诉你s.t.k.需求出s到t的第k短路,没有则输出-1 ...

随机推荐

  1. Android Annotations浅析

    这阵子遇到了好多事情,挺久没来更新博文了,这两天在学这个开源框架Android Annotations,用起来感觉挺方便的, 相信用过Spring注解的孩子理解起来应该比較easy! 就是配置起来比較 ...

  2. MYSQL 问题

    MYSQL 问题 (1)mysql server has gone away 导数据时,如果脚本太大,会执行中断,这时需要修改最大允许包的大小: set global max_allowed_pack ...

  3. windows下at命令使用详解

    T命令是Windows XP中内置的命令,它也可以媲美Windows中的“计划任务”,而且在计划的安排.任务的管理.工作事务的处理方面,AT命令具有更强大更神通的功能.AT命令可在指定时间和日期.在指 ...

  4. mysql创建用户、授权,revoke

     use mysql;set password for root =password('haowumz');select host,user,password from user ;show gran ...

  5. java设计模式之组合

    听说你们公司最近新推出了一款电子书阅读应用,市场反应很不错,应用里还有图书商城,用户可以在其中随意选购自己喜欢的书籍.你们公司也是对此项目高度重视,加大了投入力度,决定给此应用再增加点功能. 好吧,你 ...

  6. Image Based Lighting In UE3

    "IBL"全称为"Image-based Lighint",是一种伪装全局光照的方法.使用该方法可以获得较好的视觉效果并且可以达到实时渲染的目的. 实现的方法之 ...

  7. Spring入门示例

    开发环境 Spring 4.3.0+Myeclipse2015+JDK1.8 准备阶段: 1.新建一Spring01项目,然后新建一个lib文件.将下面的添加到lib文件中 2.将lib文件所有的包导 ...

  8. Struts2中文件下载

    在struts.xml中配置如下 <action name="download" class="cn.itcast.domain.User" method ...

  9. kettle--组件(1)--值映射

    组件:值映射 如下如所示: 首先,给出官方给出的文档: 个人理解: Target field name:可以理解为将source column的字段复制为另一个target column的名字. De ...

  10. Quartz.NET 实现定时任务调度

    Quartz.NET Quick Start Guide Welcome to the Quick Start Guide for Quartz.NET. As you read this guide ...