D - 小Y上学记——要迟到了!

Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others)

Problem Description

“你是我心中最美的云彩....",这不是大妈的广场舞,而是小Y的闹钟,然而小Y由于昨晚玩得太疯,导致今天居然没被这铃声闹醒!

当小Y睡眼惺忪地醒来后,发现距离第一节上课还有不到5分钟了!

小Y心想,跑过去教室肯定来不及了,只好发动一下超能力。

小Y的超能力是可以瞬间通过一条路,也就是说从一头瞬间移动到另一头,然而由于某种原因,小Y最多只能发动K次,不然就会被大家发现,就会被上交给国家。

那么小Y想问你最快要多长时间到达教室?

Input

多组数据,每组数据首先是三个整数N,M,K,表示校园道路的节点数,校园道路数,还有小Y能发动超能力的最大次数。

(2<=N<=1000,N-1<=M<=10000,0<=K<=10)

接下来是M行,每行是三个数字u,v,w,表示在节点u和节点v中有一条需要小Y跑w分钟的路,道路都是没有方向限制的。

(1<=u,v<=N,0<w<=1000)

可能有自环以及重边

其中小Y宿舍在1号节点,教室在n号节点。

保证从宿舍到教室至少存在一条路。

Output

对于每组数据,输出一个整数,表示小Y在超能力的帮助下最少要多少时间到达教室。

Sample Input

4 4 0
1 2 2
2 4 3
1 3 1
3 4 4
4 4 1
1 2 2
2 4 3
1 3 1
3 4 4

Sample Output

5
1

Hint

对于第一组数据,由于小Y不能使用超能力,无论是1-2-4还是1-3-4,都需要花费小Y5分钟的时间

对于第二组数据,由于小Y可以用一次超能力,因此可以选择1-3-4这条道路,其中3-4这条道路使用超能力通过。只需要1分钟。

解法:

   要使得所用时间最少,当然是尽可能的使用全部次数的超能力,把平面二维的图,弄成立体三维的,一共有K+1层,表示有K次超能力。则把每两层之间的连接的边权看作为0,然后用广度搜索的方法以及SPFA的思想,去求这个三维图的最短路径,起始点为Dis[0][1],终点为Dis[K][N]。注意要判断重边,环,以及数组,邻接表要开足够大、

 #include<stdio.h>
#include<string.h>
#define INF 99999999
#define MAX 1016
using namespace std;
int Dis[][MAX];/*Dis[i][j]记录到达第i层的点j的最短路*/
int Sign[];/*队列*/
int D_ID[];/*记录队列元素所对的层数*/
int First[MAX]; /*邻接表头*/
struct edge{int TO,Next,Vlaue;}ID[MAX*];/*邻接表*/
int SIGN;/*边编号,从1开始*/ void Add_E(int x,int y,int z) /*添加边*/
{
ID[SIGN].TO=y;
ID[SIGN].Vlaue=z;
ID[SIGN].Next=First[x];
First[x]=SIGN++;
}
void Cread(int N,int K)/*初始化*/
{
int i,j;
for(i=;i<=K;i++)
{
for(j=;j<=N;j++)
{First[j]=;Dis[i][j]=INF;}
}
}
void Jude(int x,int y,int c)/*判断重边,添加点*/
{
int i;
int TMD=;
for(i=First[x];i!=;i=ID[i].Next)
{
if(ID[i].TO==y)
{
TMD=;
if(ID[i].Vlaue>c)
{ID[i].Vlaue=c;TMD=;break;}
}
}
if(TMD==)
{
for(i=First[y];i!=;i=ID[i].Next)
{
if(ID[i].TO==x)
{
if(ID[i].Vlaue>c)
{ID[i].Vlaue=c;break;}
}
}
return ;
}
if(TMD==)
{
Add_E(x,y,c);/*无线图,所以需要左右两边*/
Add_E(y,x,c);/*无线图,所以需要左右两边*/
}
return ;
}
void SPFA(int s,int m,int K)
{
int i,j,k,Start=,End=,D=;
int Visit[][MAX];
Sign[Start] = s;
D_ID[Start]=;
Dis[D][s] = ;
while(Start<End)
{
D=D_ID[Start];/*获取队头元素的层数*/
k=Sign[Start++];/*获取队头元素(点)*/
Visit[D][k]=;
for(i=First[k];i!=;i=ID[i].Next)/*更新第D层的最短路*/
{ /*更新第D层的最短路*/
if(ID[i].Vlaue>&&Dis[D][ID[i].TO]>ID[i].Vlaue+Dis[D][k])
{
Dis[D][ID[i].TO]=Dis[D][k]+ID[i].Vlaue;
if(!Visit[D][ID[i].TO])
{
D_ID[End]=D;/*记录入队元素的层数*/
Sign[End++]=ID[i].TO;
Visit[D][ID[i].TO]=;
}
}
}
for(i=First[k],D=D+;i!=&&D<=K;i=ID[i].Next)
{ /*更新第D+1层的最短路*/
if(ID[i].Vlaue>&&Dis[D][ID[i].TO]>Dis[D-][k])
{
Dis[D][ID[i].TO]=Dis[D-][k];
if(!Visit[D][ID[i].TO])
{
D_ID[End]=D;
Sign[End++]=ID[i].TO;
Visit[D][ID[i].TO]=;
}
}
}
}
return ;
}
int main()
{
int i,j,T,N,a,b,c,K;
while(scanf("%d%d%d",&N,&T,&K)!=EOF)
{
Cread(N,K);SIGN=;
for(i=;i<T;i++)
{
scanf("%d%d%d",&a,&b,&c);
Jude(a,b,c);
}
SPFA(,N,K);
printf("%d\n",Dis[K][N]);
}
return ;
}

D - 小Y上学记——要迟到了!的更多相关文章

  1. C - 小Y上学记——认识新同学

    C - 小Y上学记——认识新同学 Time Limit: 4000/2000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) ...

  2. B - 小Y上学记——小Y的玩偶

    B - 小Y上学记——小Y的玩偶 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) ...

  3. A - 小Y上学记——修学分

    A - 小Y上学记——修学分 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) S ...

  4. CCF CSP 201812-1 小明上学

    题目链接:http://118.190.20.162/view.page?gpid=T80 问题描述 试题编号: 201812-1 试题名称: 小明上学 时间限制: 1.0s 内存限制: 512.0M ...

  5. WJC上学记

    WJC上学记题目描述:WJC为了追求YHY,决定考上树人,但是,愚蠢的他没有足够好的成绩,只能靠自己的亲戚来帮忙.但是由于他足够愚蠢,连自己的亲戚都不认识,仁慈而被树人优录的Geek_du决定帮助他. ...

  6. CCF201812-1小明上学

    题目背景 小明是汉东省政法大学附属中学的一名学生,他每天都要骑自行车往返于家和学校.为了能尽可能充足地睡眠,他希望能够预计自己上学所需要的时间.他上学需要经过数段道路,相邻两段道路之间设有至多一盏红绿 ...

  7. 小Y的难题

    Font Size:Aa Aa Aa Description 近期小Y迷上了数学,总是在思考各种数学问题.有一天,他不小心把墨水洒在草稿纸上.他如今能看到的是"2?3?1?4"(? ...

  8. 【luogu P4007 清华集训2017】小Y和恐怖奴隶主

    题目背景 “A fight? Count me in!” 要打架了,算我一个. “Everyone, get in here!” 所有人,都过来! 题目描述 小 Y 是一个喜欢玩游戏的 OIer.一天 ...

  9. 【luoguP4006 清华集训2017】小Y和二叉树

    题目描述 小 Y 是一个心灵手巧的 OIer,她有许多二叉树模型. 小 Y 的二叉树模型中,每个结点都具有一个编号,小 Y 把她最喜欢的一个二叉树模型挂在了墙上,树根在最上面,左右子树分别在树根的左下 ...

随机推荐

  1. FZU 2238 Daxia & Wzc's problem

    公式. $a×C_{m + i - 1}^m + d×C_{m + i - 1}^{m + 1}$. 推导过程可以看http://blog.csdn.net/queuelovestack/articl ...

  2. ssh框架的小实例(用户登录)

    刚学SSH框架写一个小实例,以便以后查看: 本案例简单的实现一个用户登录: 数据库方面就不写了,自己领悟吧!哈哈(根据user.hbm.xml文件就知道了) 我们一般可以创建下面几个包,什么意思呢,自 ...

  3. IOS多线程加锁

    注意:加锁位置不同产生结果不同 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { / ...

  4. jQuery Validate【强大的表单验证】

    一.引入菜鸟教程提供的 1.14.0 版本下载地址:http://static.runoob.com/download/jquery-validation-1.14.0.zip <script ...

  5. 关于mac地址的一点感想

    因为怕mac地址冲突导致环路影响,所以修改了本地设备的mac地址.地址修改为 77:77:77:00:22:11, 结果导致 wlan0 下发不下来. 查看配置选项/etc/config/wirele ...

  6. git在webstorm中的使用

    打开webstorm新建项目,这里新建的项目名称我起为lianxi 打开设置选项里的插件栏 搜索gitignore,并安装,我这里已安装,所以显示X,没有安装的会显示一个绿色的下载箭头.安装完后需要重 ...

  7. tcp协议栈

    TCP/IP是互联网的核心协议,也是大多数网络应用的核心协议.就前面一段时间面试中问到的TCP/IP问题,这里给出一个简单的小结.   TCP由RFC793.RFC1122.RFC1323.RFC20 ...

  8. Ecstore安装篇-1.运行系统环境要求

    运行系统环境要求 运行系统环境要求 author :James,jimingsong@vip.qq.com since :2015-03-01 支持的操作系统 支持的WEB服务器 支持的浏览器 支持的 ...

  9. 安装器---Inno Setup

    Inno Setup[1]  用Delphi写成,其官方网站同时也提供源程序免费下载.它虽不能与Installshield这类恐龙级的安装制作软件相比,但也当之无愧算是后起之秀.Inno Setup是 ...

  10. js时间戳格式化成日期格式

    原文:http://www.sufeinet.com/thread-1500-1-1.htmljs需要把时间戳转为为普通格式,一般的情况下可能用不到的,下面先来看第一种吧 function getLo ...