hdu4396:http://acm.hdu.edu.cn/showproblem.php?pid=4396

题意:一个无向带权图,然后给出起点s,终点e,让你求s到e的最短路径,但是这里的路径有要求的。每经过一条边会得到10单位的财富,这条路径必须得到的财富至少k值。

题解:一开始以为是DP,看了别人的代码,才知道了这就是传说中的二维最短路径。然后学习了一下,其实,就是图上的DP。dist[i][j]表示到达i点得到j个财富的最短路径。然后,利用spfa跑最短路,在这个过程中不断更新dist数组,最终的dist[e][k]就是所求的答案。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<queue>
  6. #define inf 100000000
  7. using namespace std;
  8. int n,m;
  9. int s,e,k;
  10. struct Edge{
  11. int v;
  12. int val;
  13. int next;
  14. }edge[];
  15. int dist[][],vis[][];
  16. struct Node{
  17. int pos,num;
  18. };
  19. int head[];
  20. int cnt;
  21. void init(){
  22. cnt=;
  23. memset(head,-,sizeof(head));
  24. }
  25. void addedge(int u,int v,int val){
  26. edge[cnt].v=v;
  27. edge[cnt].val=val;
  28. edge[cnt].next=head[u];
  29. head[u]=cnt++;
  30. }
  31. int SPFA(int s,int e,int k){
  32. for(int i=;i<=n;i++)
  33. for(int j=;j<=k;j++)
  34. dist[i][j]=inf;//初始化
  35. memset(vis,,sizeof(vis));
  36. Node tmp;
  37. tmp.pos=s;
  38. tmp.num=;
  39. dist[s][]=;
  40. vis[s][]=;
  41. queue<Node>Q;
  42. Q.push(tmp);
  43. while(!Q.empty()){
  44. Node t=Q.front();
  45. Q.pop();
  46. vis[t.pos][t.num]=;//可能会多次加到队列
  47. for(int i=head[t.pos];i!=-;i=edge[i].next){
  48. Node tp;
  49. tp.pos=edge[i].v;
  50. tp.num=t.num+;
  51. if(tp.num>k)
  52. tp.num=k;//题目是至少得到k,所以在以相同路径长度当到达e时候能得到更多的财富是符合要求的
  53. if(dist[tp.pos][tp.num]>dist[t.pos][t.num]+edge[i].val){//更新dist数组
  54. dist[tp.pos][tp.num]=dist[t.pos][t.num]+edge[i].val;
  55. if(vis[tp.pos][tp.num]==){//如果不在队列,则把这个加入队列
  56. vis[tp.pos][tp.num]=;
  57. Q.push(tp);
  58. }
  59. }
  60. }
  61. }
  62. if(dist[e][k]==inf)return -;
  63. else
  64. return dist[e][k];
  65. }
  66. int main(){
  67. int a,b,c;
  68. while(~scanf("%d%d",&n,&m)){
  69. init();
  70. for(int i=;i<=m;i++){//建图
  71. scanf("%d%d%d",&a,&b,&c);
  72. addedge(a,b,c);
  73. addedge(b,a,c);
  74. }
  75. scanf("%d%d%d",&s,&e,&k);
  76. int ans=SPFA(s,e,k);
  77. printf("%d\n",ans);
  78. }
  79.  
  80. }

More lumber is required的更多相关文章

  1. HDU 4396More lumber is required 过至少K条边的最短路

    /* ** 题目要求过最少k条边的最短路 */ #include <iostream> #include <cstdio> #include <cstring> # ...

  2. 2012 Multi-University #10

    容斥原理 A Number Sequence 题意:给出n个数,b1,b2,b3……bn,构造n个数,a1,a2,……an(ai>1),使得a1*a2*a3……an=b1*b2……bn 分析:容 ...

  3. 【转】最短路&差分约束题集

    转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...

  4. 转载 - 最短路&差分约束题集

    出处:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548    A strange lift基础最短路(或bfs)★ ...

  5. 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file

    我的maven 项目有一个红色感叹号, 而且Problems 存在 errors : Description Resource Path Location Type Archive for requi ...

  6. required

    required,这是HTML5中的一个新属性:这是HTML5中input元素中的一个属性. required译为必须的,在input元素中应用这一属性,就表示这一input元素节点是必填的或者必选的 ...

  7. The type javax.ws.rs.core.MediaType cannot be resolved. It is indirectly referenced from required .class files

    看到了http://stackoverflow.com/questions/5547162/eclipse-error-indirectly-referenced-from-required-clas ...

  8. Hibernate整合Spring异常'sessionFactory' or 'hibernateTemplate' is required

    今日在写GenericDao时,发现了一个异常,内容如下: org.springframework.beans.factory.BeanCreationException: Error creatin ...

  9. 关于Access restriction: The type 'Application' is not API (restriction on required library)

    原文链接:http://rxxluowei.iteye.com/blog/671893 今天写第一次写JavaFX的入门程序就GG 遇到了导入API的问题,无奈疯狂地通过网络找解决方案.. 我的问题是 ...

随机推荐

  1. solr5.3.1 集群服务搭建

    转http://978538.blog.51cto.com/968538/1710442 一. 安装部署 zookeeper集群部署: 节点: 10.1.12.51:2181      node1 1 ...

  2. js中的运算符和条件语句

    js中的运算符大体上可以分为4类:1算术运算符.2一元操作符.3比较运算符.4逻辑运算符. 算术运算符一般指的是加减乘除求余这五种操作符:+,-,*,/,%.通过算术运算符可以对js中的变量进行操作. ...

  3. 将JDBC ResultSet结果集变成List

    private List<Map<String, Object>> list = new ArrayList<Map<String,Object>>() ...

  4. codevs 1036 商务旅行 (倍增LCA)

    /* 在我还不知道LCA之前 暴力跑的SPFA 70分 三个点TLE */ #include<iostream> #include<cstdio> #include<cs ...

  5. 使用MiniProfiler调试Asp.net Mvc性能

    使用nuget添加MiniProfiler.EF组件 在Global文件中配置MiniProfiler protected void Application_Start() { AreaRegistr ...

  6. .net邮件发送实例 邮件内容为网页模板

    .net邮件发送实例 邮件内容为网页模板 2009-07-03 09:31:01|  分类: .NET|字号 订阅      Encoding encoding = Encoding.GetEncod ...

  7. css.day02.eg

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. Python 文件的IO

    对文件的操作 #coding=utf-8 #!user/bin/python import os #基本操作和写入文件 fo = open("test2.py",'wb') pri ...

  9. Hibernate HQL查询:

    Hibernate HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查 ...

  10. android编译系统学习

    近日接手了后续android新平台项目搭建的任务. 本文内容基于sprd公司提供的android5.1源码. 一.一般的编译工作流程 我们代码一般情况下是从芯片商SPRD/MTK获得的. 源码的编译上 ...