0%

CF-1026-D. Fewer Batteries

思路讲解

检查点之间共有 mm 条单向通道。第 ii 条通道允许从点 sis_i 移动到点 tit_isi<tis_i < t_i),但不允许反方向移动。此外,只有当机器人至少拥有 wiw_i 个充电电池时,才能使用第 ii 条通道;否则,它将在途中耗尽电量。

这个 si<tis_i < t_i 尤为关键,这说明了这张图是有向无环图(DAG)。

那么二分做法不用多说,使用天然的拓扑排序以及类似dp做法解决,然后注意斜体加粗部分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
inline bool check(ll mid){
FOR(i,0,N+5){Mxb[i]=0;}
FOR(i,1,N){
if(i!=1 && Mxb[i]==0) continue;
FOR(j,0,SZ(g[i])-1){
ll v=g[i][j][0],w=g[i][j][1];
if(min(mid,Mxb[i]+B[i])>=w){
Mxb[v]=max(Mxb[v],Mxb[i]+B[i]);
Mxb[v]=min(Mxb[v],mid);
}
}
}
if(Mxb[N]==0) return false;
return true;
}

AC代码

https://codeforces.com/contest/2110/submission/324044393

心路历程(WA,TLE,MLE……)

TLE,该代码一个点被访问多次,那么其所有边都将重新遍历一次。

image