Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:话说我用 bfs+几个优化就过了,32ms 还可以

Posted by i_mist at 2013-05-31 09:36:56 on Problem 1724
In Reply To:话说我用 bfs+几个优化就过了,32ms 还可以 Posted by:schindlerlee at 2009-08-04 14:14:34
> 开两个数组,lef,opt
> lef[i]表示到点i最多剩下的钱
> opt[i]表示到点i的最短距离
> t表示bfs队列首的点,tmp为t的邻接点的指针
> if(t.len + tmp->len > opt[n])  //中间点的距离超过目标点n的
>     continue;
> if (t.len + tmp->len > opt[tmp->to] && t.left - tmp->cost < lef[tmp->to])
> //距离比邻接点大,且费的钱多
>     continue;
> 
> if (tmp->cost <= t.left) { //还有钱走一条
>     if(t.len + tmp->len <= opt[tmp->to]) { //选的路能改善此点的距离
> 		opt[tmp->to] = min(opt[tmp->to],t.len + tmp->len);
> 		lef[tmp->to] = max(lef[tmp->to],t.left - tmp->cost);
> 		ins.nw = tmp->to;
> 		ins.len = t.len + tmp->len;
> 		ins.left = t.left - tmp->cost;
> 		que.push(ins);
>    } else if(t.left - tmp->cost >= lef[tmp->to]) {//选的路能改善到达此点的耗费
> 		opt[tmp->to] = min(opt[tmp->to],t.len + tmp->len);
> 		lef[tmp->to] = max(lef[tmp->to],t.left - tmp->cost);
> 		lef[tmp->to] = t.left - tmp->cost;
> 		ins.nw = tmp->to;
> 		ins.len = t.len + tmp->len;
> 		ins.left = t.left - tmp->cost;
> 		que.push(ins);
>    }
> }

lef[i]和opt[i]不是一起达到的似乎...请问楼主最后的答案是输出opt[i]吗..

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator