问题描述
农夫约翰正在针对一个新区域的牛奶配送合同进行研究。他打算分发牛奶到T个城镇(标号为1…T),这些城镇通过R条标号为(1…R)的道路和P条标号为(1…P)的航路相连。

每一条公路i或者航路i表示成连接城镇Ai(1<=A_i<=T)和Bi(1<=Bi<=T)代价为Ci。每一条公路,Ci的范围为0<=Ci<=10,000;由于奇怪的运营策略,每一条航路的Ci可能为负的,也就是-10,000<=Ci<=10,000。

每一条公路都是双向的,正向和反向的花费是一样的,都是非负的。

每一条航路都根据输入的Ai和Bi进行从Ai->Bi的单向通行。实际上,如果现在有一条航路是从Ai到Bi的话,那么意味着肯定没有通行方案从Bi回到Ai。

农夫约翰想把他那优良的牛奶从配送中心送到各个城镇,当然希望代价越小越好,你可以帮助他嘛?配送中心位于城镇S中(1<=S<=T)。

输入格式
输入的第一行包含四个用空格隔开的整数T,R,P,S。

接下来R行,描述公路信息,每行包含三个整数,分别表示Ai,Bi和Ci。

接下来P行,描述航路信息,每行包含三个整数,分别表示Ai,Bi和Ci。

输出格式
输出T行,分别表示从城镇S到每个城市的最小花费,如果到不了的话输出NO PATH。
样例输入
6 3 3 4
1 2 5
3 4 5
5 6 10
3 5 -100
4 6 -100
1 3 -10
样例输出
NO PATH
NO PATH
5
0
-95
-100
数据规模与约定
对于20%的数据,T<=100,R<=500,P<=500;

对于30%的数据,R<=1000,R<=10000,P<=3000;

对于100%的数据,1<=T<=25000,1<=R<=50000,1<=P<=50000。
思路:
这本来是最短路的一道模板题,但是太扯淡了,弄了很久。
坑点:
①有负数边,得用spfa。
②边数特别大,所以得优化一下,我用的deque+快读优化。
③空间不要开小了,开小了会超时。。

但是就算是这样,在dotcpp网站上还是没有过去,得分95。在蓝桥杯官网的网站上以421ms过的。

代码如下:

#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;const int maxx=1e5+10;
const int maxm=1e6+10;
struct edge{int to,next,w;
}e[maxx<<6];
int head[maxx<<6],dis[maxx],vis[maxx],num[maxx];
int n,r,p,s,tot;inline void init()
{tot=0;memset(head,-1,sizeof(head));
}
inline void add(int u,int v,int w)
{e[tot].to=v,e[tot].next=head[u],e[tot].w=w,head[u]=tot++;
}
inline void spfa()
{memset(dis,inf,sizeof(dis));memset(vis,0,sizeof(vis));memset(num,0,sizeof(num));dis[s]=0;vis[s]=1;deque<int> q;q.push_front(s);while(q.size()){int u=q.front();q.pop_front();vis[u]=0;for(int i=head[u];i!=-1;i=e[i].next){int to=e[i].to;if(dis[to]>dis[u]+e[i].w){dis[to]=dis[u]+e[i].w;if(vis[to]==0){vis[to]=1;if(q.empty())q.push_front(to);else{if(dis[to]>dis[q.front()]) q.push_back(to);else q.push_front(to);}}}}}
}
inline int read()
{int s = 0, w = 1; char ch = getchar();while(ch < '0' || ch > '9'){ if(ch == '-') w = -1; ch = getchar();}while(ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar();return s * w;
}
int main()
{n=read(),r=read(),p=read(),s=read();init();int x,y,z;for(int i=1;i<=r;i++){x=read();y=read();z=read();add(x,y,z);add(y,x,z);}for(int i=1;i<=p;i++){x=read();y=read();z=read();add(x,y,z);}spfa();for(int i=1;i<=n;i++){if(dis[i]==inf) printf("NO PATH\n");else printf("%d\n",dis[i]);}return 0;
}

(本来想用deque+LLL优化一下呢,结果优化还不如不优化。。可能LLL不适合这道题目吧。)
努力加油a啊,(o)/~

[蓝桥杯]算法提高 道路和航路(spfa+deque+快读优化)相关推荐

  1. [蓝桥杯][算法提高VIP]合并石子(区间dp+平行四边形优化)

    题目描述 在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数.求把所有石子合并成一堆的最小花费. 输入 输入第一行包含一个整数 ...

  2. [蓝桥杯][算法提高VIP]夺宝奇兵-递推+记忆化搜索

    题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 " ...

  3. [蓝桥杯][算法提高VIP]夺宝奇兵-dp

    题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 " ...

  4. JAVA 蓝桥杯 算法提高 阮小二买彩票

    JAVA 蓝桥杯 算法提高 阮小二买彩票 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 在同学们的帮助下,阮小二是变的越来越懒了,连算账都不愿意自己亲自动手了,每天的工作就是坐在电 ...

  5. [蓝桥杯][算法提高VIP]阮小二买彩票

    [蓝桥杯][算法提高VIP]阮小二买彩票 题目描述 在同学们的帮助下,阮小二是变的越来越懒了, 连算账都不愿意自己亲自动手了,每天的工作就是坐在电脑前看自己的银行账户的钱是否有变多.可是一段时间观察下 ...

  6. 【蓝桥杯算法提高VIP-开灯游戏(两种超易理懂解法:暴力/位操作(切换位))(纯正C语言代码)】

    蓝桥杯算法提高VIP-开灯游戏 题目描述 有9盏灯与9个开关,编号都是1~9. 每个开关能控制若干盏灯,按下一次会改变其控制的灯的状态(亮的变成不亮,不亮变成亮的). 具体如下: 第一个开关控制第二, ...

  7. [蓝桥杯][算法提高] 填充蛋糕

    [蓝桥杯][算法提高] 填充蛋糕 编程计算涂满高为2,半径为r的圆形蛋糕表面,需要多少表面积的奶油(只要涂上表面和侧面) 读入一个数r,输出需要奶油的表面积,结果保留一位小数 样例输入 5.0 样例输 ...

  8. c语言oj题1923偶数之和,问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)

    题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...

  9. JAVA 蓝桥杯 算法提高 色盲的民主

    JAVA 蓝桥杯 算法提高 色盲的民主 资源限制 时间限制:1.0s 内存限制:256.0MB  色盲的民主 问题描述 n个色盲聚在一起,讨论一块布的颜色.尽管都是色盲,却盲得各不相同.每个人都有自 ...

最新文章

  1. CSS 实例之打开大门
  2. java中文问号_java 中文转出来是问号怎么回事?有大神知道怎么改么?
  3. mysql批量修改http为https,墨涩网 - typecho系统升级全站https数据库批量替换网址/内容——墨涩网...
  4. python面向对象初识
  5. 微软Build2021今日召开,共同期待VS2022+.NET6!
  6. MySQL用户管理和权限管理
  7. 企业最喜欢招聘什么样的Java程序员?谈谈我的看法
  8. java 死锁_java死锁分析
  9. IPv6邻居状态与邻居检测机制
  10. dnn305的一个bug
  11. 小爱音箱mini系统故障怎么办_小编处理win7系统连接小爱音箱mini的解决教程
  12. 批判性思维--如何高效学习
  13. linux卷组大小查看,Linux逻辑卷,卷组管理
  14. 中国浓缩咖啡机行业市场供需与战略研究报告
  15. linux修改文档拥有人为,Linux系统修复
  16. Go基础:常见的json包--encoding/json、easyjson、ffjson、json-iterator/go
  17. 8021什么意思_违章代码8021是什么意思
  18. 辨析 工作绩效数据、工作绩效信息、工作绩效报告
  19. 湖北武汉机械员证书机械设备安全的施工管理建筑七大员培训
  20. PHP左侧分类表显示,利用CSS实现wordpress侧边栏分类目录分两列显示 | 迷失的世界...

热门文章

  1. linux共享 smb3.0,区块链3.0_精通Hyperledger之Samba使用(4)
  2. java手写_怎么用Java制作手写板,如果能提供代码更好
  3. python中return和and连用
  4. win2000服务器 网站设置,服务器_Win2000中DNS服务器的设置,一、DNS概述 计算机在网 - phpStudy...
  5. c语言 程序循环,C语言程序设计-循环例子
  6. iOS 开发和部署过程概述
  7. bigdecimal如何做除法_公务员行测朴素逻辑解题技巧—代入排除法
  8. Redis学习(一)——
  9. haproxy代理设置及配置文件详解
  10. supervisor进程管理工具