。。

这题一眼就看出就是一个二维DP

dp[i][j]表示到点i使用了j次免费边的最短距离

MD 卡SPFA。。

遂写dij。 AC

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <queue>
#include <vector>
#define eps 1e-8
#define MAXN 11111
#define MAXM 111111
#define INF 111111111
using namespace std;
typedef pair<int, int> P;
vector<P>g[MAXN];
long long dis[MAXN][22];
int n, m, k;
struct node
{
int v, num;
long long w;
node(){}
node(int a, int b, long long c){v = a; num = b; w = c;}
bool operator >(const node &cmp) const
{
return w > cmp.w;
}
};
priority_queue<node, vector<node>, greater<node> > q;
void dij()
{
for(int i = 1; i <= n; i++)
for(int j = 0; j <= k; j++)
dis[i][j] = INF;
dis[1][0] = 0;
q.push(node(1, 0, 0));
while(!q.empty())
{
node tmp = q.top();
q.pop();
int u = tmp.v;
int num = tmp.num;
long long w = tmp.w;
for(int i = 0; i < g[u].size(); i++)
{
int v = g[u][i].first;
long long tw = g[u][i].second;
if(num < k && w < dis[v][num + 1])
{
dis[v][num + 1] = w;
q.push(node(v, num + 1, w));
}
if(w + tw < dis[v][num])
{
dis[v][num] = w + tw;
q.push(node(v, num, w + tw));
}
}
}
long long ans = dis[n][0];
for(int i = 1; i <= k; i++)
ans = min(ans, dis[n][i]);
printf("%lld\n", ans);
}
int main()
{
int u, v, w;
while(scanf("%d%d%d", &n, &m, &k) != EOF)
{
while(!q.empty()) q.pop();
for(int i = 0; i <= n; i++) g[i].clear();
for(int i = 0; i < m; i++)
{
scanf("%d%d%d", &u, &v, &w);
g[u].push_back(make_pair(v, w));
g[v].push_back(make_pair(u, w));
}
dij();
}
return 0;
}

[Usaco2009 Feb]Revamping Trails 堆优化 Dijkstra的更多相关文章

  1. Bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级 dijkstra,堆,分层图

    1579: [Usaco2009 Feb]Revamping Trails 道路升级 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1573  Solv ...

  2. BZOJ 1579: [Usaco2009 Feb]Revamping Trails 道路升级( 最短路 )

    最短路...多加一维表示更新了多少条路 -------------------------------------------------------------------------------- ...

  3. bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级 -- 分层图最短路

    1579: [Usaco2009 Feb]Revamping Trails 道路升级 Time Limit: 10 Sec  Memory Limit: 64 MB Description 每天,农夫 ...

  4. bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级 优先队列+dij

    1579: [Usaco2009 Feb]Revamping Trails 道路升级 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1768  Solv ...

  5. 【BZOJ 1579】 1579: [Usaco2009 Feb]Revamping Trails 道路升级 (最短路)

    1579: [Usaco2009 Feb]Revamping Trails 道路升级 Description 每天,农夫John需要经过一些道路去检查牛棚N里面的牛. 农场上有M(1<=M< ...

  6. BZOJ_1579_[Usaco2009 Feb]Revamping Trails 道路升级_分层图最短路

    BZOJ_1579_[Usaco2009 Feb]Revamping Trails 道路升级_分层图最短路 Description 每天,农夫John需要经过一些道路去检查牛棚N里面的牛. 农场上有M ...

  7. 分层图最短路 【bzoj1579】[Usaco2009 Feb]Revamping Trails 道路升级

    1579: [Usaco2009 Feb]Revamping Trails 道路升级 Description 每天,农夫John需要经过一些道路去检查牛棚N里面的牛. 农场上有M(1<=M< ...

  8. 【bzoj1579】[Usaco2009 Feb]Revamping Trails 道路升级 分层图最短路

    题目描述 每天,农夫John需要经过一些道路去检查牛棚N里面的牛. 农场上有M(1<=M<=50,000)条双向泥土道路,编号为1..M. 道路i连接牛棚P1_i和P2_i (1 < ...

  9. BZOJ 1579 [Usaco2009 Feb]Revamping Trails 道路升级

    堆优化的dijkstra. 把一个点拆成k个. 日常空间要开炸一次.. //Twenty #include<cstdio> #include<cstring> #include ...

随机推荐

  1. 使用Vitamio打造自己的Android万能播放器(6)——在线播放(播放列表)

    前言 新版本的VPlayer由设计转入开发阶段,预计开发周期为一个月,这也意味着新版本的Vitamio将随之发布,开发者们可以和本系列文章一样,先开发其他功能.本章内容为"在线视频播放列表& ...

  2. aps.net要掌握的技术

    Spring.Net.NHibernate.Entity Framework.ASP.Net MVC.HTML5.WCF.数据库集群.分布式应用集群.高性能读写NoSql

  3. Oracle EBS使用adpatch工具打patch过程【Z】

    Oracle EBS使用adpatch工具打patch过程 从Metalink下载补丁 登陆到Metalink(https://support.oracle.com),Oracle内部用户可以使用AR ...

  4. Python核心编程读笔 10:函数和函数式编程

    第11章 函数和函数式编程 一 调用函数  1 关键字参数 def foo(x): foo_suite # presumably does some processing with 'x' 标准调用 ...

  5. Java数组复制

    System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制.其函数原型是: public static void arraycopy(Object src, int sr ...

  6. Linux学习之head命令

    head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. 1.命令格式: hea ...

  7. CFILE追加写入文件

    CFile file; file.Open(strName, CFile::modeWrite|CFile::modeNoTruncate|CFile::modeCreate); ) { file.S ...

  8. 非常值得学习的java 绘图板源代码

    package minidrawpad; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; impor ...

  9. 【Howie玩docker】-Centos 7 docker 启动容器iptables报No chain/target/match by that name

    重启了一下服务器,以前能运行的docker网络应用都不能正常开启了. 因为用的是centos7,所以猜测有可能是iptables的问题. docker start 或者run 后总是提示类似的错误: ...

  10. [MATLAB] 利用遗传算法函数求目标函数的最优解

    最近接触到了遗传算法以及利用遗传算法求最优解,所以就把这些相关的内容整理记录一下. 一.遗传算法简介(摘自维基百科) 遗传算法(英语:genetic algorithm (GA))是计算数学中用于解决 ...