HDU-1839 Delay Constrained Maximum Capacity Path 最短路
2013-11-01 19:15
429 查看
题意: n个点 m条路 T时间内最小容量最大
思路: 二分最小容量 + 最短路
由于s数组定义只定义了n( m条边 ) 纠结了一下午找不出错 QAQ 还是太粗心
思路: 二分最小容量 + 最短路
由于s数组定义只定义了n( m条边 ) 纠结了一下午找不出错 QAQ 还是太粗心
#include "stdio.h" #include "string.h" #include "vector" #include "queue" #include "algorithm" using namespace std; const int maxn = 10005; const int inf = 1<<29; int n,m,T,pos; int s[maxn*5]; int dis[maxn]; bool vis[maxn]; struct node { int v,cap,t,next; }edge[maxn*10]; int head[maxn]; void add( int a,int b,int c,int d ) { edge[++pos].v = b; edge[pos].cap = c; edge[pos].t = d; edge[pos].next = head[a]; head[a] = pos; } typedef pair<int,int>pii; bool Dijkstra( int s,int Cap ) { for( int i = 1; i <= n; i ++ ) dis[i] = inf; memset( vis,0,sizeof(vis) ); priority_queue<pii,vector<pii>,greater<pii> >que; dis[s] = 0; que.push( make_pair(dis[s],s) ); while( !que.empty() ) { pii u = que.top(); que.pop(); int x = u.second; vis[x] = true; if( dis[x] > T ) return false; if( x == n ) return dis[x]; for( int i = head[x]; i != -1; i = edge[i].next ) { node v = edge[i]; if( v.cap < Cap || vis[v.v] ) continue; if( dis[v.v] > dis[x] + v.t ) { dis[v.v] = dis[x] + v.t; que.push( make_pair(dis[v.v],v.v) ); } } } return false; } void init() { pos = 0; for( int i = 1; i <= n; i ++ ) head[i] = -1; } int main() { //freopen( "data.txt","r",stdin ); int t,a,b,c,d; scanf("%d",&t); while( t-- ) { scanf("%d%d%d",&n,&m,&T); init(); for( int i = 0; i < m; i ++ ) { scanf("%d%d%d%d",&a,&b,&c,&d); add(a,b,c,d); add(b,a,c,d); s[i] = c; } sort(s,s+m); int ld = 0,rd = 0,mid; for( int i = 1; i < m; i ++ ) { if( s[i] != s[i-1] ) s[++rd] = s[i]; } while( ld <= rd ) { mid = (ld+rd)>>1; if( Dijkstra( 1,s[mid] ) ) { ld = mid+1; } else rd = mid-1; } printf("%d\n",s[rd]); } return 0; }
相关文章推荐
- HDU N皇后——高效方法详解(bit方法)
- hdu 1028
- HDU 1003 Max Sum(最大连续子序列和)
- HDU 4348 To the moon
- HDU 2199 Can you solve this equation?
- HDU 4331 Image Recognition
- HDU 4503
- HDU 1097 (整数快速幂取模)
- hdu 4286 (list的reverse时间复杂度为n)
- POJ 3169 Layout (HDU 3592) 差分约束
- hdu 2647 拓扑排序
- hdu 4309 Seikimatsu Occult Tonneru 枚举+最大流
- HDU 4927 Series 1
- hdu 1491 Octorber 21st(数学题)
- 【HDU】4117 GRE Words AC自动机+线段树优化DP
- HDU 3076 ssworld VS DDD (概率DP)
- hdu 3966 Aragorn's Story树剖成段更新单点查询模板
- hdu 2092 整数解(数学题)
- hdu 5325 Crazy Bobo (拓扑排序代替树的遍历解决爆栈)
- HDU 5321 Beautiful Set