题目大意:

n个点,m条双向边。给你起点s,终点t,以及k。问你从s到t至少得到k分的最短路。边有自环,且边可以重复走。边每走一次获得10分。

(1<=N<=5000)(0<=M<=100000) (1<=S, T<=N; 0<=K<=500)

题解:

二维spfa,d[x][j]表示到x这个点经过j条边的最短路,有个重要的优化是:当L>K时把它并入到走K条边的状态中。

比赛时一直用拆点+一维spfa写,一直TLE或MLE……方法整个错了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<utility>
using namespace std;
queue< pair<int,int> >q;
const int inf=1<<29;
const int maxn=1000000;
int to[maxn],edge[maxn],cap[maxn],next[maxn],d[5001][100];
bool v[5001][100];
int em,n,m,maxk;
inline int change(int x)
{if(x<=maxk)return x;else return maxk;
}
void addedge(int x,int y,int d)
{to[em]=y;cap[em]=d;next[em]=edge[x];edge[x]=em++;
}
void spfa(int s)
{for(int i=0;i<=n;i++)for(int j=0;j<=51;j++){d[i][j]=inf;v[i][j]=false;}d[s][0]=0;v[s][0]=true;q.push(make_pair(s,0));while(!q.empty()){int x=q.front().first,j=q.front().second;q.pop();int p=edge[x];while(p!=-1){if(d[x][j]+cap[p]<d[to[p]][change(j+1)]){d[to[p]][change(j+1)]=d[x][j]+cap[p];if(!v[to[p]][change(j+1)]){v[to[p]][change(j+1)]=true;q.push(make_pair(to[p],change(j+1)));}}p=next[p];}v[x][j]=false;}
}
int main()
{while(scanf("%d%d",&n,&m)!=EOF){em=0;memset(edge,-1,sizeof(edge));memset(next,-1,sizeof(next));for(int i=1;i<=m;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);addedge(u,v,w);addedge(v,u,w);}int s,t;scanf("%d%d%d",&s,&t,&maxk);if(maxk%10==0)maxk=maxk/10;else maxk=(maxk/10)+1;spfa(s);if(d[t][maxk]<inf)printf("%d\n",d[t][maxk]);else printf("-1\n");}return 0;
}

hdu 4396 More lumber is required相关推荐

  1. ACM比赛经验、刷题记录及模板库总结(更新中)

    前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...

  2. Spring 自动装配及其注解

    一.属性自动装配 首先,准备三个类,分别是User,Cat,Dog.其中User属性拥有Cat和Dog对象. 1 package com.hdu.autowire; 2 3 public class ...

  3. 【HDU - 1216 】Assistance Required (模拟,类似素数打表,不是素数问题!)

    题干: After the 1997/1998 Southwestern European Regional Contest (which was held in Ulm) a large conte ...

  4. 【HDU - 3746 】Cyclic Nacklace (KMP,最小循环节问题)

    题干: CC always becomes very depressed at the end of this month, he has checked his credit card yester ...

  5. hdu 2838求逆序数开了两个数组

    http://acm.hdu.edu.cn/showproblem.php?pid=2838 Cow Sorting Time Limit: 2000/1000 MS (Java/Others)    ...

  6. HDU 6441 Find Integer 【费马大定理】

    传送门:HDU 6441 Find Integer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...

  7. HDU题目分类大全【大集合】

    基础题: 1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.  1032.1037.1040.1048.1056.105 ...

  8. HDU 4389 - X mod f(x)

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...

  9. 转载:Hdu 题目分类

    原址点击 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056. ...

最新文章

  1. 【超详细】手把手教你使用YOLOX进行物体检测(附数据集)
  2. 剖析Vue原理实现双向绑定MVVM
  3. 解决TensorBoard训练集和测试集指标只能分开显示的问题(基于Keras)
  4. IEEE802.11协议栈
  5. 大侠稍等!URL 中为何出现奇怪的字符
  6. MySQL(七)关于MySQL不同版本下临键锁锁定范围不同
  7. 正则表达式入门之使用元字符
  8. java输出毫秒时间
  9. java并发编程之正确地终止一个线程interrupt/interrupted
  10. Linux/Android之sar查看IO/CPU占用率
  11. CVPR 新规严禁审稿期间公开宣传论文,可发 arXiv,LeCun:疯了吧!
  12. 一个元素的偏移的方法
  13. java opencv教程_史上最全 java 集成 opencv 教程
  14. C#多个DataTable根据某一列匹配,其余字段相加求和的高效算法。
  15. 华为手机怎么隐藏按键图标_你的华为手机隐藏功能,待激活
  16. 已有一个排好序的数组,由键盘输入一个数,要求按原来的排序规律将其插入到数组中.
  17. accumulate 的用法
  18. HTTP HTTPS SSL TLS
  19. 幼儿园课程体系结构图_构建幼儿园创新课程体系的思考
  20. 项目经理必须知道的7种项目管理方案

热门文章

  1. 知识点:软硬结合板都有哪些应用领域?
  2. 深度好文推荐:互联网厂商,究竟是如何看待5G的?
  3. Vue3内置组件teleport详解
  4. 因骚扰电话投诉举报量高 四川电信被约谈
  5. 第二期,问道PC端游戏免安装,下载即可体验
  6. webpack热更新原理-连阿珍都看懂了
  7. unity3d:shader: Clip裁剪显示
  8. 立体匹配经典算法:PatchMatchStereo
  9. 小技巧(6):进行BelgiumTSC交通标志数据集识别(定义自己的数据集)
  10. 【机器学习】LatLRR