[BZOJ 2200][Usaco2011 Jan]道路和航线 spfa+SLF优化
Description
Input
Output
Sample Input
1 2 5
3 4 5
5 6 10
3 5 -100
4 6 -100
1 3 -10
样例输入解释:
一共六个城镇。在1-2,3-4,5-6之间有道路,花费分别是5,5,10。同时有三条航线:3->5,
4->6和1->3,花费分别是-100,-100,-10。FJ的中心城镇在城镇4。
Sample Output
NO PATH
NO PATH
5
0
-95
-100
样例输出解释:
FJ的奶牛从4号城镇开始,可以通过道路到达3号城镇。然后他们会通过航线达到5和6号城镇。
但是不可能到达1和2号城镇。
Solution
做法:spfa+SLF优化
裸上$spfa$会$T$,加个堆优化也$T$了,所以就$SLF$咯
$Dijkstra$也可以写但是好麻烦...
写$Dijkstra$的话要缩点,还要拓扑...所以直接上$spfa+SLF$就好啦
#include <bits/stdc++.h>using namespace std ;#define N 200010 const int inf = 1e10 ;inline void read( int &x ) {x = 0 ; int f = 1 ; char c = getchar() ;while( c < '0' || c > '9' ) { if( c == '-' ) f = -f ; c = getchar() ; }while( c >= '0' && c <= '9' ) { x = (x<<1) + (x<<3) + c - 48 ; c =getchar() ; } x = x * f ; }int n , m1, m2 , s ; int head[ N ] , cnt ; int d[ N ] , vis[ N ] ; struct edge {int to , nxt ,v ; }e[ N ] ;deque < int > q ;void ins( int u , int v , int w ) {e[ ++ cnt ].to = v ;e[ cnt ].nxt = head[ u ] ;e[ cnt ].v = w ;head[ u ] = cnt ; }void spfa() {vis[ s ] = 1 ;for( int i = 1 ; i <= n ; i ++ ) d[ i ] = inf ;d[ s ] = 0 ;q.push_back( s ) ;while( !q.empty() ) {int u = q.front() ;q.pop_front() ;vis[ u ] = 0 ;for( int i = head[ u ] ; i ; i = e[ i ].nxt ) {int v = e[ i ].to ;if( d[ v ] > d[ u ] + e[ i ].v ) {d[ v ] = d[ u ] + e[ i ].v ;if( ! vis[ v ] ) {vis[ v ] = 1 ;if( !q.empty() && d[ v ] >= d[ q.front() ] ) q.push_back( v ) ;else q.push_front( v ) ;}}}} }int main() {read( n ) ; read( m1 ) ; read( m2 ) ; read( s ) ;for( int i = 1 ; i <= m1 ; i ++ ) {int u , v , w ;read( u ) ; read( v ) ; read( w ) ;ins( u , v , w ) ;ins( v , u , w ) ;}for( int i = 1 ; i <= m2 ; i ++ ) {int u , v , w ;read( u ) ;read( v ) ; read( w ) ;ins( u ,v , w ) ;}spfa() ;for( int i = 1 ; i <= n ; i ++ ){if( d[ i ] == inf ) {puts( "NO PATH" ) ;}else printf( "%d\n" , d[ i ] ) ;}return 0 ; }
转载于:https://www.cnblogs.com/henry-1202/p/9736702.html
[BZOJ 2200][Usaco2011 Jan]道路和航线 spfa+SLF优化相关推荐
- 「BZOJ2200」[Usaco2011 Jan] 道路和航线 - 最短路+拓扑排序
->点我进原题 [Usaco2011 Jan]道路和航线 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 1116 Solved: 410 Des ...
- 道路与航线(spfa+deque优化)
农夫约翰正在一个新的销售区域对他的牛奶销售方案进行调查. 他想把牛奶送到T个城镇,编号为1~T. 这些城镇之间通过R条道路 (编号为1到R) 和P条航线 (编号为1到P) 连接. 每条道路 i 或者航 ...
- AcWing 342. 道路与航线 (连通块Dijkstra+拓扑序||spfa+slf优化)
整理的算法模板:ACM算法模板总结(分类详细版) 农夫约翰正在一个新的销售区域对他的牛奶销售方案进行调查. 他想把牛奶送到T个城镇,编号为1~T. 这些城镇之间通过R条道路 (编号为1到R) 和P条航 ...
- 初识费用流 模板(spfa+slf优化) 餐巾计划问题
今天学习了最小费用最大流,是网络流算法之一.可以对于一个每条边有一个容量和一个费用(即每单位流的消耗)的图指定一个源点和汇点,求在从源点到汇点的流量最大的前提下的最小费用. 这里讲一种最基础也是最好掌 ...
- BZOJ 2199: [Usaco2011 Jan]奶牛议会 [2-SAT 判断解]
http://www.lydsy.com/JudgeOnline/problem.php?id=2199 题意:裸的2-SAT,但是问每个变量在所有解中是只能为真还是只能为假还是既可以为真又可以为假 ...
- BZOJ 2442 [Usaco2011 Open]修剪草坪:单调队列优化dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2442 题意: 有n个数a[i]从左到右排成一排. 你可以任意选数,但是连续的数不能超过k个 ...
- AcWing 342. 道路与航线 (双端队列广搜问题,SPFA)
题目描述 农夫约翰正在一个新的销售区域对他的牛奶销售方案进行调查. 他想把牛奶送到T个城镇,编号为1~T. 这些城镇之间通过R条道路 (编号为1到R) 和P条航线 (编号为1到P) 连接. 每条道路i ...
- 342. 道路与航线
农夫约翰正在一个新的销售区域对他的牛奶销售方案进行调查. 他想把牛奶送到 T 个城镇,编号为 1∼T. 这些城镇之间通过 R 条道路 (编号为 1 到 R) 和 P 条航线 (编号为 1 到 P) 连 ...
- 【BZOJ】4152: [AMPPZ2014]The Captain【SLF优化Spfa】
4152: [AMPPZ2014]The Captain Time Limit: 20 Sec Memory Limit: 256 MB Submit: 2107 Solved: 820 [Sub ...
最新文章
- 清华姚班陈丹琦获斯隆奖!与去年得主马腾宇是同班同学,博士毕业论文是近十年最热之一...
- linux 安装lnmp
- iBATIS.NET 学习笔记(五)
- Doc2Vec,Word2Vec文本相似度 初体验。
- java 反射用法_Java 反射的概念与使用
- python编写交互界面查分app_Django项目中model的数据处理以及页面交互方法
- paip.提升用户体验----- 密码控件的使用
- 操作系统课程设计 —— 模拟磁盘文件系统实现 (Java)
- 记录点滴23(中秋、国庆篇)
- android 蓝牙读取数据格式,解析Android蓝牙数据包
- 常用汉字字体字号的介绍及选用原则
- oracle字符串分割和提取函数定义
- Filename too long,Clone succeeded,but checkout failed.
- SSD-Tensorflow 目标检测(VOC2007)
- 大工邮箱收件服务器,Outlook 2010 设置邮箱详细步骤
- SharePoint 2010 电子书下载网站推荐
- Oracle 12c 新特性之 数据库内归档(In-Database Archiving)
- java 字符串相加问题
- wps office word 插入图片显示异常 只显示一个长条
- 网站推广工具,怎么推广?