BZOJ1598 K短路 Astar裸题
来源:互联网 发布:怎么禁止软件启动 编辑:程序博客网 时间:2024/05/20 04:29
大家都很强, 可与之共勉 。
手写堆2333
# include <cstdio># include <cstring># include <utility># include <algorithm># include <functional>template < class T > inline bool chkmin ( T& d, const T& x ) { return ( d > x ) ? ( d = x ), 1 : 0 ; }# define N 100010# define M 100010template < class T >class Heap { private : int len ; T a [M << 1] ; public : Heap ( ) { len = 0 ; } inline void push ( const T& ele ) { a [++ len] = ele ; std :: push_heap ( a + 1, a + 1 + len, std :: greater < T > ( ) ) ; } inline void clear ( ) { len = 0 ; } inline T& top ( ) { return a [1] ; } inline void pop ( ) { std :: pop_heap ( a + 1, a + 1 + len, std :: greater < T > ( ) ) ; -- len ; } inline bool empty ( ) { return len == 0 ; }} ;struct edge { int to, w ; edge* nxt ; edge ( ) { } edge ( int to, int w, edge* nxt ) : to ( to ), w ( w ), nxt ( nxt ) { }} ;class Graph { private : edge g [M << 1], *head [N] ; public : Graph ( ) { memset ( head, 0, sizeof head ) ; } inline void add_edge ( int u, int v, int w ) { static edge* cur ( g ) ; *cur = edge ( v, w, head [u] ) ; head [u] = cur ++ ; } inline edge*& operator [] ( const int& u ) { return head [u] ; }} G, Rev ;Heap < std :: pair < int, int > > Q ;int ans [N] ;int dis [N] ;# undef N# undef Mint n, m, k ;void Dijkstra ( int s ) { memset ( dis, 0x3f, sizeof ( int ) * ( n + 1 ) ) ; Q.clear ( ) ; dis [s] = 0 ; Q.push ( std :: make_pair ( 0, s ) ) ; while ( ! Q.empty ( ) ) { int u = Q.top ( ).second ; Q.pop ( ) ; for ( edge* it = Rev [u] ; it ; it = it -> nxt ) { int& v = it -> to ; if ( chkmin ( dis [v], dis [u] + it -> w ) ) { Q.push ( std :: make_pair ( dis [v], v ) ) ; } } }}void Astar ( int s, int t ) { if ( dis [s] == 0x3f3f3f3f ) return ; Q.clear ( ) ; int cnt ( 0 ) ; Q.push ( std :: make_pair ( dis [s], s ) ) ; while ( ! Q.empty ( ) ) { int u = Q.top ( ).second, d = Q.top ( ).first ; Q.pop ( ) ; if ( u == t ) ans [++ cnt] = d ; if ( cnt == k ) return ; for ( edge* it = G [u] ; it ; it = it -> nxt ) { Q.push ( std :: make_pair ( d - dis [u] + it -> w + dis [it -> to], it -> to ) ) ; } }}int main ( ) { scanf ( "%d%d%d", & n, & m, & k ) ; while ( m -- ) { int u, v, w ; scanf ( "%d%d%d", & u, & v, & w ) ; Rev.add_edge ( v, u, w ) ; G.add_edge ( u, v, w ) ; } Dijkstra ( 1 ) ; memset ( ans, -1, sizeof ( int ) * ( k + 1 ) ) ; Astar ( n, 1 ) ; for ( int i = 1 ; i <= k ; ++ i ) { printf ( "%d\n", ans [i] ) ; }}
阅读全文
0 0
- BZOJ1598 K短路 Astar裸题
- [BZOJ1598][Usaco2008 Mar]牛跑步(k短路)
- bzoj1598[Usaco2008 Mar]牛跑步 K短路模板 spfa+dij
- [bzoj1598][Usaco2008 Mar]牛跑步 dijkstra k短路
- Poj 2449 Remmarguts' Date(Astar K短路)
- POJ2449-第K短路,Astar,优先队列
- [SDOI2010]魔法猪学院(Astar 优化K短路)
- BZOJ1975 [Sdoi2010]魔法猪学院 K短路 Astar A* 贪心
- BZOJ3890 [Usaco2015 Jan]Meeting Time K短路 Astar || 拓扑DP
- BZOJ 1598 浅谈AstaR启发式搜索有向图网络K阶最短路
- BZOJ1598: [Usaco2008 Mar]牛跑步 次短路裸题
- k短路
- k短路
- k短路
- K短路
- K短路
- Astar
- AStar
- 后端是如何接收http访问请求的?
- G
- Ubuntu解压缩zip,tar,tar.gz,tar.bz2
- 2018网易校招试题
- Cannot change version of project facet Dynamic Web Module to 2.4
- BZOJ1598 K短路 Astar裸题
- mybatis的insert语句
- 模板库(数论相关)
- 线程问题<3>
- pytorch 在ubuntu16.04 下安装
- [CDOJ1252]-24点-模拟/搜索
- 转义字符问题
- H
- Scala中的数组