题目描述

如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度。

输入输出格式

输入格式:

第一行包含三个整数N、M、S,分别表示点的个数、有向边的个数、出发点的编号。

接下来M行每行包含三个整数Fi、Gi、Wi,分别表示第i条有向边的出发点、目标点和长度。

输出格式:

一行,包含N个用空格分隔的整数,其中第i个整数表示从点S出发到点i的最短路径长度(若S=i则最短路径长度为0,若从点S无法到达点i,则最短路径长度为2147483647)

输入输出样例

输入样例#1:

  1. 4 6 1
  2. 1 2 2
  3. 2 3 2
  4. 2 4 1
  5. 1 3 5
  6. 3 4 3
  7. 1 4 4
输出样例#1:

  1. 0 2 4 3

说明

时空限制:1000ms,128M

数据规模:

对于20%的数据:N<=5,M<=15

对于40%的数据:N<=100,M<=10000

对于70%的数据:N<=1000,M<=100000

对于100%的数据:N<=10000,M<=500000

样例说明:

60分SPFA代码存档:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<queue>
  5. #define MAXN 2147483647
  6. #define N 10010
  7. using namespace std;
  8. struct node{
  9. int u,v,w;
  10. int next;
  11. }e[];
  12. int n,m,s,head[N],dis[N],ei;
  13. bool exist[N];
  14. void add(int u,int v,int w){
  15. e[++ei].u=u;e[ei].v=v;e[ei].w=w;
  16. e[ei].next=head[u];head[u]=ei;
  17. }
  18. queue<int> q;
  19. int main()
  20. {
  21. scanf("%d%d%d",&n,&m,&s);
  22. memset(dis,0x3f3f3f3f,sizeof(dis));
  23. memset(exist,false,sizeof(exist));
  24. for(int i=,x,y,z;i<=m;i++){
  25. scanf("%d%d%d",&x,&y,&z);
  26. add(x,y,z);
  27. }
  28. exist[s]=true;dis[s]=;q.push(s);
  29. while(!q.empty()){
  30. int p=q.front();q.pop();exist[p]=false;
  31. for(int i=head[p];i;i=e[i].next){
  32. int v=e[i].v;
  33. if(dis[v]>dis[p]+e[i].w){
  34. dis[v]=dis[p]+e[i].w;
  35. if(!exist[v]){
  36. q.push(v);
  37. exist[v]=true;
  38. }
  39. }
  40. }
  41. }
  42. for(int i=;i<=n;i++){
  43. if(dis[i]==0x3f) printf("%d ",MAXN);
  44. else printf("%d ",dis[i]);
  45. }
  46. return ;
  47. }

head数组开大一点,就成90了

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<queue>
  5. #define MAXN 2147483647
  6. #define N 10010
  7. using namespace std;
  8. struct node{
  9. int u,v,w;
  10. int next;
  11. }e[];
  12. int n,m,s,head[],ei;
  13. long long dis[N];
  14. bool exist[N];
  15. void add(int u,int v,int w){
  16. e[++ei].u=u;e[ei].v=v;e[ei].w=w;
  17. e[ei].next=head[u];head[u]=ei;
  18. }
  19. queue<int> q;
  20. int main()
  21. {
  22. scanf("%d%d%d",&n,&m,&s);
  23. memset(dis,0x3f3f3f3f,sizeof(dis));
  24. memset(exist,false,sizeof(exist));
  25. for(int i=,x,y,z;i<=m;i++){
  26. scanf("%d%d%d",&x,&y,&z);
  27. add(x,y,z);
  28. }
  29. exist[s]=true;dis[s]=;q.push(s);
  30. while(!q.empty()){
  31. int p=q.front();q.pop();exist[p]=false;
  32. for(int i=head[p];i;i=e[i].next){
  33. int v=e[i].v;
  34. if(dis[v]>dis[p]+e[i].w){
  35. dis[v]=dis[p]+e[i].w;
  36. if(!exist[v]){
  37. q.push(v);
  38. exist[v]=true;
  39. }
  40. }
  41. }
  42. }
  43. for(int i=;i<=n;i++){
  44. if(dis[i]==0x3f3f3f3f) printf("%lld ",MAXN);
  45. else printf("%lld ",dis[i]);
  46. }
  47. return ;
  48. }

洛谷 P 3371 单元最短路的更多相关文章

  1. 洛谷P2243 电路维修 [最短路]

    题目传送门 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...

  2. 洛谷P1491 集合位置 [最短路,SPFA]

    题目传送门 题目描述 每次有大的活动,大家都要在一起“聚一聚”,不管是去好乐迪,还是避风塘,或者汤姆熊,大家都要玩的痛快.还记得心语和花儿在跳舞机上的激情与释放,还记得草草的投篮技艺是如此的高超,还记 ...

  3. 洛谷P1613 跑路(最短路+倍增)

    P1613 跑路 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B的 ...

  4. 洛谷P1346 电车【最短路】

    题目:https://www.luogu.org/problemnew/show/P1346 题意:n个路口,每个路口有好几条轨道,默认指向给出的第一个路口. 如果要换到另外的轨道去需要按一次开关.问 ...

  5. 洛谷P1339 热浪【最短路】

    题目:https://www.luogu.org/problemnew/show/P1339 题意:给定一张图,问起点到终点的最短路. 思路:dijkstra板子题. 很久没有写最短路了.总结一下di ...

  6. 洛谷P1629 邮递员送信 最短路-Djistra

    先上一波题目qwq https://www.luogu.org/problem/P1629· 复习了一波 dijstra 的 priority_queue(优先队列)优化的写法 tips: 求单项路中 ...

  7. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  8. 洛谷 P5304 [GXOI/GZOI2019]旅行者(最短路)

    洛谷:传送门 bzoj:传送门 参考资料: [1]:https://xht37.blog.luogu.org/p5304-gxoigzoi2019-lv-xing-zhe [2]:http://www ...

  9. NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序

    原文链接https://www.cnblogs.com/zhouzhendong/p/9258043.html 题目传送门 - 洛谷P3953 题目传送门 - Vijos P2030 题意 给定一个有 ...

随机推荐

  1. java中的堆与栈

    Java 中的堆和栈 Java把内存划分成两种:一种是栈内存,一种是堆内存. 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配 . 当在一段代码块定义一个变量时,Java就在栈中 ...

  2. Objective-C相关Category的收集(更新)

    Categories是给你得不到源码的classes增加功能的一种方法.这个页面收集一些相关的Category,并且持续更新,你可以订阅关注.作者是Fille ?str?m,是@ IMGNRY的联合创 ...

  3. Asp.Net Core 入门(五)—— 布局视图_Layout.cshtml

    布局视图和我们在Asp.Net MVC一样,布局视图_Layout.cshtml使得所有视图保持一致的外观变得更加容易,因为我们只有一个要修改的布局视图文件,更改后将立即反映在整个应用程序的所有视图中 ...

  4. Linux系统分区 进程管理 软件包安装

    对于一块新的磁盘来说,系统能够使用需要有分区.格式化文件系统.挂载等主要操作,下面通过命令的方式对一块磁盘进行操作. 一. Linux系统分区 1.1 在虚拟机开机前选择虚拟机配置,添加一个新的SCS ...

  5. Mybatis generator自动生成代码包括实体,dao,xml文件

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration ...

  6. PAT (Advanced Level) Practise - 1097. Deduplication on a Linked List (25)

    http://www.patest.cn/contests/pat-a-practise/1097 Given a singly linked list L with integer keys, yo ...

  7. 哪些 Python 库让你相见恨晚?

    知乎用户,A European Swallow. 苇叶.Aran He.jerry等人赞同 补充三个有助于自动化日常工作的: sh:sh 1.08 — sh v1.08 documentation可以 ...

  8. Python内置方法详解

    1. 字符串内置方法详解 为何要有字符串?相对于元组.列表等,对于唯一类型的定义,字符串具有最简单的形式. 字符串往往以变量接收,变量名. 可以查看所有的字符串的内置方法,如: 1> count ...

  9. datetime模块,random模块

    6.10自我总结 1.datetime模块(用于修改日期) import datetime print(datetime.datetime.now(),type(datetime.datetime.n ...

  10. Django项目 生成依赖包

    生成依赖包文件 requirements.txt,最好用 pip3, 如果有 python2 的话会默认使用 py2 的 pip pip3 -r freeze > requirements.tx ...