/*
** 题目要求过最少k条边的最短路
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
const int maxn = 5010;
const int maxm = 200010;
const int INF = 1<<31-1;
struct node{
int v,len,next;
}edge[maxm];
int vis[maxn][510],head[maxn],dp[maxn][510];
int n,m,s,t,k,id;
void add_edge(int u,int v,int len){
edge[id].v = v;edge[id].len = len;edge[id].next = head[u];head[u]= id++;
edge[id].v = u;edge[id].len = len;edge[id].next = head[v];head[v]= id++;
} void init(){
int u,v,cost;
memset(head,-1,sizeof(head));
id = 0;
while( m-- ){
scanf("%d%d%d",&u,&v,&cost);
add_edge(u,v,cost);
}
scanf("%d%d%d",&s,&t,&k);
}
struct NODE{
int v,num;
};
int spfa(int s){
int mincost = INF;
//cout << mincost << endl;
memset(dp,-1,sizeof(dp));
memset(vis,0,sizeof(vis));
NODE tmp,now;
queue<NODE>que;
tmp.v = s,tmp.num = 0;
dp[tmp.v][tmp.num] = 0;
vis[tmp.v][tmp.num] = 1;
que.push(tmp);
while( !que.empty()){
now = que.front();
// cout << now.v << " " << now.num << " " << dp[now.v][now.num] << endl;
if(now.v == t && now.num == k && dp[now.v][now.num] < mincost)
mincost = dp[now.v][now.num];
vis[now.v][now.num] = 0;
que.pop();
for(int id = head[now.v]; id != -1; id = edge[id].next){
int v = edge[id].v;
tmp.v = edge[id].v;tmp.num = now.num+10;
if( tmp.num > k)tmp.num = k;
if(dp[tmp.v][tmp.num] == -1 || dp[tmp.v][tmp.num] > dp[now.v][now.num] + edge[id].len){
dp[tmp.v][tmp.num] = dp[now.v][now.num] + edge[id].len;
if( !vis[tmp.v][tmp.num]){
vis[tmp.v][tmp.num] = 1;
que.push(tmp);
}
}
}
} if( mincost == INF)return -1;
return mincost;
}
int main(){
//freopen("in.txt","r",stdin);
while( ~scanf("%d%d",&n,&m)){
init();
printf("%d\n",spfa(s));
}
return 0;
}

  

HDU 4396More lumber is required 过至少K条边的最短路的更多相关文章

  1. POJ 3613 快速幂+Floyd变形(求限制k条路径的最短路)

    题意:       给你一个无向图,然后给了一个起点s和终点e,然后问从s到e的最短路是多少,中途有一个限制,那就是必须走k条边,路径可以反复走. 思路:       感觉很赞的一个题目,据说证明是什 ...

  2. poj 3613 经过k条边最短路 floyd+矩阵快速幂

    http://poj.org/problem?id=3613 s->t上经过k条边的最短路 先把1000范围的点离散化到200中,然后使用最短路可以使用floyd,由于求的是经过k条路的最短路, ...

  3. More lumber is required

    hdu4396:http://acm.hdu.edu.cn/showproblem.php?pid=4396 题意:一个无向带权图,然后给出起点s,终点e,让你求s到e的最短路径,但是这里的路径有要求 ...

  4. POJ 3294 出现在至少K个字符串中的子串

    在掌握POJ 2774(两个串求最长公共子串)以及对Height数组分组后,本题还是容易想出思路的. 首先用字符集外的不同字符连接所有串,这是为了防止两个后缀在比较时超过某个字符串的分界.二分子串的长 ...

  5. POJ 3261 出现至少K次的可重叠最长子串

    题意就是给一列数字,求最长的一个子串,并且满足子串在原数串中出现至少K次,子串可以重叠. 解法是将问题转为判定性问题,二分子串的长度,判定是否满足重复至少K次.判定方法是经典的根据子串长度将Heigh ...

  6. HDU 4862 Jump 任意起点最大权K链不相交覆盖

    你可以从任意起点开始起跳最多K次 每次跳你可以选择往右或者往下跳 从(x1,y1)跳到(x2,y2) 消耗的能量是曼哈顿距离-1 但是如果每次跳的起点和终点格子里的数字是相同的为X的话你会得到X能量 ...

  7. poj2449 (第k条最短路)

    题意:求n个点中,a到b的第k条最短路 思路: 用最短路求出估价函数的h,再在搜索过程中记录g,利用A*求出 最开始想到的便是A*和最短路,但是脑子抽了,居然一个一个去求- -,TL了后才发现可以倒着 ...

  8. K条最短路径算法(KSP, k-shortest pathes):Yen's Algorithm

    参考: K最短路径算法之Yen's Algorithm Yen's algorithm 基于网络流量的SDN最短路径转发应用 K条最短路径算法:Yen's Algorithm 算法背景 K 最短路径问 ...

  9. 分层图 (可以选择K条路的权为0,求最短路)

    分层图可以处理从图中选取k条边使其边权变为0,求最短路 Description 在你的强力援助下,PCY 成功完成了之前的所有任务,他觉得,现在正是出去浪的大好时光.于是,他来到高速公路上,找到一辆摩 ...

随机推荐

  1. 【译】在 Linux 上不安装 Mono 构建 .NET Framework 类库

    在这篇文章中,我展示了如何在Linux上构建针对.NET Framework版本的.NET项目,而不使用Mono.通用使用微软新发布的 Mocrosoft.NETFramework.Reference ...

  2. ZK安装、ZK配置、ZK集群部署

    今天心血来潮,想搞一下zookeeper集群.具体步骤记录下吧~嘻嘻

  3. 后台post注入爆密码

    后台登陆框post注入按照注入的方式属于post,和前台搜索型post注入.文本框注入类似,由于目前主流的注 入工具除了穿山甲等较新工具以外几乎都是get注入,尤其是对于这种后台账户型post注入式无 ...

  4. Mysql的行级锁与表级锁

    在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足. 在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎).表级锁(MYISAM ...

  5. 夯实Java基础(十二)——异常处理

    1.异常处理概述 在Java程序执行过程中, 总是会发生不被期望的事件, 阻止程序按照程序员预期正常运行, 这就是Java程序出现的异常. 异常处理是基于面向对象的一种运行错误处理机制,通过对异常问题 ...

  6. Of efficiency and methodology

    There are only too many articles and books which pertains to the discussion of efficiency and method ...

  7. 基于 WPF 模块化架构下的本地化设计实践

    背景描述 最近接到一个需求,就是要求我们的 WPF 客户端具备本地化功能,实现中英文多语言界面.刚开始接到这个需求,其实我内心是拒绝的的,但是没办法,需求是永无止境的.所以只能想办法解决这个问题. 首 ...

  8. 浅谈osi模型 三次握手 四次挥手 ddos攻击原理

    C/S B/S 架构 C:client 端 B:browser 浏览器 S:server 端 C/S架构,基于客户端与服务端之间的通信 例如:QQ,抖音,快手,微信,支付宝等等 优点:个性化设置,响应 ...

  9. 测试自动化:java+selenium3 UI自动化(1) - 环境搭建

    1.前言 我大概是在2012年第一次正式接触到自动化测试,那个时候跟随我的团队一起,就当时项目的UI自动化尝试做出了探索. 在我离开那家公司的时候,我们的自动化测试体系仍然难言完美,但是也已经达到了非 ...

  10. windows server2012 nVME和网卡等驱动和不识别RAID10问题

    安装2012---不识别M.2 nVME,下官方驱动,注入到系统里 缺多驱动---用ITSK万能驱动添加:|Win8012R2.x64(可解决不支持操作系统,win10与server2012R2通用) ...