【POJ】1797 Heavy Transportation 二分+最短路
来源:互联网 发布:软件学徒招聘骗局 编辑:程序博客网 时间:2024/05/19 18:14
传送门:【POJ】1797 Heavy Transportation
题目分析:二分边权然后做最短路。
代码如下:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std ;#define REP( i , a , b ) for ( int i = ( a ) ; i < ( b ) ; ++ i )#define FOR( i , a , b ) for ( int i = ( a ) ; i <= ( b ) ; ++ i )#define REV( i , a , b ) for ( int i = ( a ) ; i >= ( b ) ; -- i )#define travel( e , H , u ) for ( Edge* e = H[u] ; e ; e = e -> next )#define CLR( a , x ) memset ( a , x , sizeof a )typedef int value_t ;const int MAXN = 1005 ;const int MAXH = 1000005 ;const int MAXE = 1000005 ;const int INF = 0x3f3f3f3f ;struct Edge {int v ;value_t c ;Edge* next ;} ;struct Heap {int v , idx ;Heap () {}Heap ( value_t v , int idx ) : v ( v ) , idx ( idx ) {}bool operator < ( const Heap& a ) const {return v < a.v ;}} ;struct priority_queue {Heap h[MAXH] ;int point ;priority_queue () : point ( 1 ) {}void clear () {point = 1 ;}void maintain ( int o ) {int p = o , l = o << 1 , r = o << 1 | 1 ;while ( o > 1 && h[o] < h[o >> 1] ) {swap ( h[o] , h[o >> 1] ) ;o >>= 1 ;}o = p ;while ( 1 ) {if ( l < point && h[l] < h[p] ) p = l ;if ( r < point && h[r] < h[p] ) p = r ;if ( o == p ) break ;swap ( h[o] , h[p] ) ;o = p , l = o << 1 , r = o << 1 | 1 ;}}void push ( value_t v , int idx ) {h[point] = Heap ( v , idx ) ;maintain ( point ++ ) ;}void pop () {h[1] = h[-- point] ;maintain ( 1 ) ;}bool empty () {return point == 1 ;}int front () {return h[1].idx ;}} ;struct Shortest_Path_Algorithm {priority_queue q ;Edge E[MAXE] ;Edge* H[MAXN] ;Edge* cur ;value_t d[MAXN] ;bool vis[MAXN] ;void clear () {cur = E ;CLR ( H , 0 ) ;}void addedge ( int u , int v , value_t c ) {cur -> v = v ;cur -> c = c ;cur -> next = H[u] ;H[u] = cur ++ ;}bool dijkstra ( int s , int t , int limit ) {q.clear () ;CLR ( vis , 0 ) ;CLR ( d , INF ) ;d[s] = 0 ;q.push ( d[s] , s ) ;while ( !q.empty () ) {int u = q.front () ;q.pop () ;if ( vis[u] ) continue ;vis[u] = 1 ;travel ( e , H , u ) {int v = e -> v ;if ( e -> c >= limit && d[v] > d[u] + e -> c ) {d[v] = d[u] + e -> c ;q.push ( d[v] , v ) ;}}}return d[t] != INF ;}} G ;int n , m ;void solve () {int u , v , c ;int l = INF , r = 0 ;G.clear () ;scanf ( "%d%d" , &n , &m ) ;while ( m -- ) {scanf ( "%d%d%d" , &u , &v , &c ) ;G.addedge ( u , v , c ) ;G.addedge ( v , u , c ) ;if ( l > c ) l = c ;if ( c > r ) r = c ;}while ( l < r ) {int mid = ( l + r + 1 ) >> 1 ;if ( G.dijkstra ( 1 , n , mid ) ) l = mid ;else r = mid - 1 ;}printf ( "%d\n\n" , l ) ;}int main () {int T , cas = 0 ;scanf ( "%d" , &T ) ;while ( T -- ) {printf ( "Scenario #%d:\n" , ++ cas ) ;solve () ;}return 0 ;}
0 0
- 【POJ】1797 Heavy Transportation 二分+最短路
- poj 1797 Heavy Transportation (最短路变形)
- poj 1797 Heavy transportation 最短路
- POJ 1797 Heavy Transportation 最短路变形
- POJ 1797 Heavy Transportation (最短路)
- poj 1797 Heavy Transportation 最短路 dijkstra
- Poj 1797 Heavy Transportation ( 最短路变形
- poj-1797-Heavy Transportation [最短路][Dijkstra]
- poj 1797 Heavy Transportation 【最短路Dijkstra 变式】
- POJ 1797 Heavy Transportation Dijstr最短路变形
- POJ 1797 Heavy Transportation(最小生成树或最短路)
- POJ 1797 Heavy Transportation 【最短路思维+最大承载】
- 【POJ 1797】Heavy Transportation(最短路dij)
- POJ 1797 Heavy Transportation【Dijkstra最短路变形】
- 【POJ1797】Heavy Transportation 最短路
- POJ1797 Heavy Transportation 最短路
- POJ 1797 Heavy Transportation&&POJ 2253 Frogger 最短路 dijkstra变形
- POJ 1797 Heavy Transportation(kuangbin带你飞 专题四:最短路)
- Http-代理
- 中国十大特色购物网站
- [算法导论] 递归式求解的三种方法
- 即时改变badgeValue的值(使用KVO)
- eclipse字体颜色的设置方法
- 【POJ】1797 Heavy Transportation 二分+最短路
- iOS程序发布测试生成AD_HOC时需要的证书
- git 的使用(3)-基础命令
- Oracle Database 学习
- Android Service与Activity之间通信的几种方式
- Nginx负载均衡配置实例详解
- 龙组第5周总结
- ios中使view向左移动,且右边不动
- jquery笔记大全