2763: [JLOI2011]飞行路线

Time Limit: 10 Sec Memory Limit: 128 MB

Submit: 2156 Solved: 818

[Submit][Status][Discuss]

Description

Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价格。Alice和Bob现在要从一个城市沿着航线到达另一个城市,途中可以进行转机。航空公司对他们这次旅行也推出优惠,他们可以免费在最多k种航线上搭乘飞机。那么Alice和Bob这次出行最少花费多少?

Input

数据的第一行有三个整数,n,m,k,分别表示城市数,航线数和免费乘坐次数。

第二行有两个整数,s,t,分别表示他们出行的起点城市编号和终点城市编号。(0<=s,t<=n)

接下来有m行,每行三个整数,a,b,c,表示存在一种航线,能从城市a到达城市b,或从城市b到达城市a,价格为c。(0<=a,b<=n,a与b不相等,0<=c<=1000)

Output

只有一行,包含一个整数,为最少花费。

Sample Input

5 6 1

0 4

0 1 5

1 2 5

2 3 5

3 4 5

2 3 3

0 2 100

Sample Output

8

HINT

对于30%的数据,2<=n<=50,1<=m<=300,k=0;

对于50%的数据,2<=n<=600,1<=m<=6000,0<=k<=1;

对于100%的数据,2<=n<=10000,1<=m<=50000,0<=k<=10.

Source

/*
spfa.
将每个点P拆成(k+1)个点:P_0~P_k,
代表使用0~k次传送器之后到达点P.
*/
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#define MAXN 10001
#define MAXK 21
using namespace std;
int dis[MAXN][MAXK],n,m,K,head[MAXN],tot,ans=1e9,s,t;
bool b[MAXN][MAXK];
struct edge{
int v,next,x;
}e[MAXN*10];
struct data{
int n,k;
};
queue<data>q;
void add(int u,int v,int z){
e[++tot].v=v;
e[tot].x=z;
e[tot].next=head[u];
head[u]=tot;
}
int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
return x*f;
}
void spfa(){
memset(dis,127/3,sizeof(dis));dis[s][0]=0,b[s][0]=true;
data x;x.n=s,x.k=0;q.push(x);
while(!q.empty()){
x=q.front();q.pop();int u=x.n,k=x.k;
b[u][k]=false;
for(int i=head[u];i;i=e[i].next){
int v=e[i].v;
if(dis[v][k]>dis[u][k]+e[i].x){
dis[v][k]=dis[u][k]+e[i].x;
if(!b[v][k]){
b[v][k]=true;
data y;y.n=v,y.k=k;
q.push(y);
}
}
if(k<K){
if(dis[v][k+1]>dis[u][k]){
dis[v][k+1]=dis[u][k];
if(!b[v][k+1]){
b[v][k+1]=true;
data y;y.n=v,y.k=k+1;
q.push(y);
}
}
}
}
}
}
int main(){
int x,y,z;
n=read();m=read();K=read();s=read();t=read();s++;t++;
for(int i=1;i<=m;i++){
x=read();y=read();z=read();x++;y++;
add(x,y,z);add(y,x,z);
}
spfa();
for(int i=0;i<=K;i++)
ans=min(ans,dis[t][i]);
printf("%d",ans);
return 0;
}

poj 2763: [JLOI2011]飞行路线(spfa分层图最短路)的更多相关文章

  1. 2763. [JLOI2011]飞行路线【分层图最短路】

    Description Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并 ...

  2. BZOJ 2763: [JLOI2011]飞行路线 【分层图模板】

    任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=2763 2763: [JLOI2011]飞行路线 Time Limit: 10 Sec  M ...

  3. 【bzoj2763】[JLOI2011]飞行路线 (分层图最短路)(优先队列dij)

    [bzoj2763][JLOI2011]飞行路线 2014年3月25日1,7260 Description Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城 ...

  4. bzoj 2763: [JLOI2011]飞行路线【分层图+spfa】

    为什么早年的题总是从0开始标号啊--又zz了一次WA 分层图的题只有这一个套路吧,建分层图,然后优化时间是分层跑spfa然后层与层之间单独跑即可 #include<iostream> #i ...

  5. BZOJ2763 [JLOI2011]飞行路线 【分层图 + 最短路】

    题目 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价格 ...

  6. BZOJ 2763 飞行路线(分层图最短路)题解

    题意:中文题意不解释... 思路:分层图最短路,我们再开一维用来表示当前用了多少次免费次数,dis[i][j]就表示到达i点用了j次免费的最短路,有点DP的感觉. 当个模板用 参考:分层图最短路 代码 ...

  7. [JLOI2011]飞行路线(分层图)

    [JLOI2011]飞行路线 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在 n 个城市设有业务,设这些城市分别标记为 0 到 n−1 ,一共有 m ...

  8. 「JLOI2011」「LuoguP4568」飞行路线(分层图最短路

    题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在nn个城市设有业务,设这些城市分别标记为00到n-1n−1,一共有mm种航线,每种航线连接两个城市,并且 ...

  9. P4568 [JLOI2011]飞行路线(分层图)

    机房dalao推荐写的...(标签分层图) 经过前几题的分层图的洗礼,我深刻地体会到了分层图的优点和好处(主要是不想打dp....) 先说题吧.... 很明确,模型是最短路,但是,怎么跑k个,是个问题 ...

随机推荐

  1. linux Grant 添加 MySql 用户

    Grant 添加 MySql 用户 2009-04-03 14:40 我安装的版本: mysql> select version();+------------+| version()   |+ ...

  2. 委托demo

    delegate bool Filter(string s); class test { static void Main() { Filter f=new Filter(A); Display(ne ...

  3. Error message “Assembly must be registered in isolation” when registering Plugins in Microsoft Dynamics CRM 2011 2013 解决办法

    Error message “Assembly must be registered in isolation” when registering Plugins in Microsoft Dynam ...

  4. SQL Server Data Tool 嘹解(了解)一下 SSDT -摘自网络

    Visual Studio 2010 的伺服器管理員可以用來連接 Sharepoint.伺服器,還可以透過資料連接連結至 SQL Server  等資料來源.以資料來源為例,您可以利用單一工具(Vis ...

  5. 北京Uber优步司机奖励政策(2月3日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  6. H5离线缓存机制-manifest

    简介:Manifest 其实就是web应用的一种缓存机制,主要用于现在webapp应用中,它是浏览器自己的一种机制,随着移动互联网时代的到来,网络可靠性降低,如果我们已经将需要的文件缓存下下来,一旦网 ...

  7. $.post()请求 ation请求,jsp获取的处理结果

    public void write(String content, String charset) { getHttpResponse().setCharacterEncoding(charset); ...

  8. 正尝试在 OS 载入程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内执行托管代码,这样做会导致应用程序挂起。

    出错提示: 正尝试在 OS 载入程序锁内执行托管代码. 不要尝试在 DllMain 或映像初始化函数内执行托管代码,这样做会导致应用程序挂起. 原因分析: .NET2.0中添加了42种非常强大的调试助 ...

  9. 正确的使用枚举(Enum)

    状态与选项的区别(states and options) 在用enum之前,我个人觉得,区分一下状态和选项的概念还是很必要的. 状态,同时只能有一种,如“OK”,“Error”,不可能同时是OK和Er ...

  10. Android(java)学习笔记151: SurfaceView使用

    1.SurfaceView简介       在一般的情况下,应用程序的View都是在相同的GUI线程(UI主线程)中绘制的.这个主应用程序线程同时也用来处理所有的用户交互(例如,按钮单击或者文本输入) ...