【HDU】1839 Delay Constrained Maximum Capacity Path 二分+最短路
2014-08-22 11:12
423 查看
传送门:【HDU】1839 Delay Constrained Maximum Capacity Path
题目分析:二分容量下限,然后每次最短路的时候只跑容量大于等于下限的边,如果最短路长度小于等于t,调整下界,否则调整上界。是不是很简单?
代码如下:
题目分析:二分容量下限,然后每次最短路的时候只跑容量大于等于下限的边,如果最短路长度小于等于t,调整下界,否则调整上界。是不是很简单?
代码如下:
#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 ) const int MAXN = 10005 ; const int MAXE = 100005 ; const int INF = 0x7f7f7f7f ; struct Edge { int v , c ; int cap ; Edge* next ; } ; struct Shortest_Path_Algorithm { Edge E[MAXE] , *H[MAXN] , *cur ; int d[MAXN] ; bool vis[MAXN] ; int Q[MAXN] , head , tail ; void init () { cur = E ; CLR ( H , 0 ) ; } void addedge ( int u , int v , int c , int cap ) { cur -> v = v ; cur -> c = c ; cur -> cap = cap ; cur -> next = H[u] ; H[u] = cur ++ ; } int spfa ( int s , int t , int capacity ) { CLR ( d , INF ) ; CLR ( vis , 0 ) ; head = tail = 0 ; d[s] = 0 ; Q[tail ++] = s ; while ( head != tail ) { int u = Q[head ++] ; if ( head == MAXN ) head = 0 ; vis[u] = 0 ; travel ( e , H , u ) { int v = e -> v ; if ( e -> cap >= capacity && d[v] > d[u] + e -> c ) { d[v] = d[u] + e -> c ; if ( !vis[v] ) { vis[v] = 1 ; if ( d[v] < d[Q[head]] ) { if ( head == 0 ) head = MAXN ; Q[-- head] = v ; } else { Q[tail ++] = v ; if ( tail == MAXN ) tail = 0 ; } } } } } return d[t] ; } } G ; void scanf ( int& x , char c = 0 ) { while ( ( c = getchar () ) < '0' || c > '9' ) ; x = c - '0' ; while ( ( c = getchar () ) >= '0' && c <= '9' ) x = x * 10 + c - '0' ; } void solve () { int n , m , t ; int l = 0 , r = INF ; int u , v , c , cap ; G.init () ; scanf ( n ) , scanf ( m ) , scanf ( t ) ; while ( m -- ) { scanf ( u ) , scanf ( v ) , scanf ( cap ) , scanf ( c ) ; G.addedge ( u , v , c , cap ) ; G.addedge ( v , u , c , cap ) ; if ( cap > r ) r = cap ; if ( l > cap ) l = cap ; } while ( l < r ) { int m = ( l + r + 1 ) >> 1 ; if ( G.spfa ( 1 , n , m ) <= t ) l = m ; else r = m - 1 ; } printf ( "%d\n" , l ) ; } int main () { int T ; scanf ( T ) ; while ( T -- ) solve () ; return 0 ; }
相关文章推荐
- 【HDU 1839】 Delay Constrained Maximum Capacity Path(二分+最短路)
- HDU 1839 Delay Constrained Maximum Capacity Path 【二分 + 最短路】
- hdu 1839 Delay Constrained Maximum Capacity Path 二分/最短路
- hdu 1839 Delay Constrained Maximum Capacity Path(最短路+二分)
- HDU-1839 Delay Constrained Maximum Capacity Path 最短路+二分
- HDU 1839 Delay Constrained Maximum Capacity Path(最短路+二分)
- HDU 1839 Delay Constrained Maximum Capacity Path(最短路+二分)
- Delay Constrained Maximum Capacity Path HDU - 1839(二分+最短路)
- HDU 1839 Delay Constrained Maximum Capacity Path 最短路+二分
- HDU 1839 Delay Constrained Maximum Capacity Path 最短路+二分
- HDU 1839 Delay Constrained Maximum Capacity Path(最短路+二分搜索)
- HDU 1839 Delay Constrained Maximum Capacity Path (二分最短路)
- HDU 1839 Delay Constrained Maximum Capacity Path(二分+最短路)
- hdu 1839 Delay Constrained Maximum Capacity Path 二分下限+最短路spfa
- HDU 1839 Delay Constrained Maximum Capacity Path 二分+最短路
- hdu 1839 Delay Constrained Maximum Capacity Path 二分+ spfa
- HDU - 1839 Delay Constrained Maximum Capacity Path(二分+dijkstra)
- hdu 1839 Delay Constrained Maximum Capacity Path(spfa+二分)
- HDU 1839 Delay Constrained Maximum Capacity Path(二分+SPFA)
- hdu 1839 Delay Constrained Maximum Capacity Path(二分+SPFA)