HDU 2962 Trucking(二分+带限制最短路)(二)

2014-11-24 09:46:41 · 作者: · 浏览: 1
int tmp = d[u]+E[e].len;
if(d[E[e].v] > tmp){
d[E[e].v] = tmp;
if(!inq[E[e].v]){
inq[E[e].v]=true;
q.push(E[e].v);
}
}
}
}
return d[end];
}

int main(){
int cas=1,u,v,h,l,start,end,hh;
while(~scanf("%d%d",&n,&m) && n+m){
if(cas!=1)puts("");
init();
for(int i=0; i scanf("%d%d%d%d",&u,&v,&h,&l);
addEdge(u,v,h,l);
addEdge(v,u,h,l);
}
scanf("%d%d%d",&start,&end,&hh);

int ans,ans_h=0,ans_len=INF,left=0, right=hh+1;

while(left
limit = (left+right)>>1;
ans=SPFA(start, end);
if(ans!=INF){
left=limit+1;
if(limit>ans_h){
ans_h=limit;
ans_len=ans;
}
else if(limit==ans_h&&ans ans_len=ans;
}
}
else{
right=limit;
}
}
printf("Case %d:\n",cas++);
if(ans_len==INF){
puts("cannot reach destination");
}
else{
printf("maximum height = %d\n", ans_h);
printf("length of shortest route = %d\n", ans_len);
}
}
return 0;
}