最短路,然后可以有多次免费的机会,不难写,但是最短路这次试着用指针写果然快了点,一开始看错数据范围数组开太大tle;

----------------------------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<queue>
#include<iostream>
#include<algorithm>
using namespace std;
#define rep(i,n) for(int i=1;i<=n;i++)
#define clr(x,c) memset(x,c,sizeof(x))
#define adde(u,v,w) add(u,v,w),add(v,u,w)

int read(){
   int x=0;
   char c=getchar();
   int f=1;
   while(!isdigit(c)){
      if(c=='-') f=-1;
      c=getchar();
   }
   while(isdigit(c)){
      x=x*10+c-'0';
      c=getchar();
   }
   return x*f;
}

struct edge{
    int to,d;
    edge*next;
};
edge*pt,edges[50005*2];
edge*head[10005];
int n,m,k,s,t;
int dis[10005][15];

struct node{
 int x,k,d;
 node(int _x,int _k,int _d):x(_x),k(_k),d(_d){};
 bool operator<(const node&rhs)const{
   return d>rhs.d;}
};
priority_queue<node>q;

void add(int u,int v,int w){
   pt->to=v;
   pt->d=w;
   pt->next=head[u];
   head[u]=pt++;
}

void dijkstra(){
   clr(dis,0x3f);
   clr(dis[s],0);
   q.push(node(s,0,0));
   rep(i,k)
        q.push(node(s,i,0));
   while(!q.empty()){
    node o=q.top();
    q.pop();
    if(o.d!=dis[o.x][o.k]) continue;
    for(edge*e=head[o.x];e;e=e->next){
        int to=e->to;
        if(dis[o.x][o.k]+e->d<dis[to][o.k]){
             dis[to][o.k]=dis[o.x][o.k]+e->d;
             q.push(node(to,o.k,dis[to][o.k]));
         }
        if(dis[o.x][o.k]<dis[to][o.k+1]&&o.k<k){
             dis[to][o.k+1]=dis[o.x][o.k];
             q.push(node(to,o.k+1,dis[to][o.k+1]));
        }
     }
   }
}
int main(){
   /*freopen("test.in","r",stdin);
   freopen("test.out","w",stdout);*/
   scanf("%d%d%d%d%d",&n,&m,&k,&s,&t);
   s++,t++;
   clr(head,0);
   pt=edges;
   rep(i,m){
      int u=read(),v=read(),w=read();
      u++,v++;
      adde(u,v,w);
   }
   /*rep(i,n){
          printf("%d\n",i);
         for(edge*e=head[i];e;e=e->next){
               printf("%d %d\n",e->to,e->d);
         }
     }*/
   dijkstra();
   int ans=dis[t][0];
   rep(i,k){
        ans=min(ans,dis[t][i]);
    }
    printf("%d\n",ans);
    //fclose(stdin);fclose(stdout);
    return 0;
}

----------------------------------------------------------------------------------------------

2763: [JLOI2011]飞行路线

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 1448  Solved: 551
[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

[Submit][Status][Discuss]

转载于:https://www.cnblogs.com/20003238wzc--/p/5017677.html

bzoj2763:最短路相关推荐

  1. [C] [最短路] 只有5行的算法:Floyd-Warshall

    终于学到求最短路了,终于来到我最喜欢的算法--Floyd-Warshall了!今天还有点小激动呢! 我喜欢它,当然是因为它逻辑十分简单咯!真的只有5行诶! Floyd-Warshall算法 题目描述 ...

  2. BZOJ4152 AMPPZ2014 The Captain(最短路)

    事实上每次走到横坐标或纵坐标最接近的点一定可以取得最优方案.于是这样连边跑最短路就可以了. #include<iostream> #include<cstdio> #inclu ...

  3. Codeforces.1051F.The Shortest Statement(最短路Dijkstra)

    题目链接 先随便建一棵树. 如果两个点(u,v)不经过非树边,它们的dis可以直接算. 如果两个点经过非树边呢?即它们一定要经过该边的两个端点,可以直接用这两个点到 u,v 的最短路更新答案. 所以枚 ...

  4. BZOJ1491: [NOI2007]社交网络(Floyd 最短路计数)

    Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 2343  Solved: 1266 [Submit][Status][Discuss] Descrip ...

  5. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

  6. E:By Elevator or Stairs? CF595 DP最短路

    题目链接 比赛的时候一看,这不是最短路吗,然后敲了一个最短路. 然后比赛完发现大家基本都写的dp,我真是个憨憨,dp3行 最短路就建个简单的图,dp就是从上一维转化过来就是了 优秀的dp: //#pr ...

  7. The Shortest Statement CodeForces - 1051F LCA+最短路

    太弱了... 一开始看到题感觉是跑一个最小生成树在上边进行LCA就行了,但是发现过不了样例,然后就是就想到了之前做过类似做法的题目,就是非生成树上的边最多只有21条,然后就那些边记录下来,通过每一条边 ...

  8. JZOJ #4722 跳楼机 (最短路模型的完美转化)

    题目描述: 给出$h,x,y,z$,求在$h$以内,$x,y,z$可以凑出多少个不同的数.$(1\leq{h}\leq{10^{18}},1\leq{x,y,z}\leq{10^5})$ 解题思路: ...

  9. matlab单机无限大系统_基于MATLAB的单机无穷大系统短路故障分析_吕鹏

    _______________________________电子技术__丝I 基于MA丁LAB的单机无穷大系统短路故障分析 山东科技大学吕鹏钟家成纪妮妮李漫漫 [摘要]本z l),NIATLAB7. ...

最新文章

  1. EST:西湖大学鞠峰组-污水厂病原菌与土著反硝化细菌是多重抗生素耐药基因的活跃表达者...
  2. 李彦宏:人工智能会让这个世界变得更美好吗?YES AI DO!
  3. 004_LoadOnStartup
  4. jquery学习手记(2)jQuery对象和DOM对象相互转换
  5. leetcode 之Median of Two Sorted Arrays(五)
  6. vue 点击倒计时 ajax 封装
  7. alert回调_你知道javascript函数的回调怎么用吗?
  8. ax的范数最大_矩阵方程ax=b的范数约束最小二乘解.pdf
  9. 【caffe-matlab】使用matlab训练caffe及绘制loss
  10. Soft Skill
  11. c语言不借助其他变量交换a b的值,C++面试题之数a、b的值互换(不使用中间变量)...
  12. 富士通MB95F636H输出PWM
  13. 打开Access时电脑出现蓝屏,错误编号0x00000116的问题解决
  14. 谷歌学术上不了的解决办法
  15. CentOS 7 从下载到安装
  16. Python黑客攻防入门
  17. vue踩坑笔记06---vuex的state,getter,mustation,action,module
  18. 杜洋STM32100步回顾总结
  19. 推荐20个优秀的网页色彩搭配实例
  20. python部落翻译_python利用google翻译 翻译字幕文件

热门文章

  1. 安卓手机计算器应用java_安卓体重计算器java源程序 使用Intent在Activity间传输数据...
  2. LSH︱python实现局部敏感随机投影森林——LSHForest/sklearn(一)
  3. Tomcat(Install)
  4. 1041: C语言程序设计教程(第三版)课后习题9.8
  5. 第18天:京东网页头部制作
  6. C#实现WebService服务 项目完整总结
  7. PourOver – 快速筛选和排序大的数据集合
  8. hdu3787 A+B
  9. Windows平台下搭建Git服务器的图文教程
  10. 机器学习----监督学习算法之决策树(Decision Tree)