bzoj 1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚【dp+线段树】
2018-05-05 20:43
435 查看
设f[i]为i时刻最小花费
把牛按l升序排列,每头牛能用f[l[i]-1]+c[i]更新(l[i],r[i])的区间min,所以用线段树维护f,用排完序的每头牛来更新,最后查询E点即可
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N=10005; const long long inf=1e18; int n,st,ed; struct xds { int l,r; long long lz,mn; }t[2000005]; struct qwe { int l,r,v; }a ,s ; bool cmp(const qwe &a,const qwe &b) { return a.l<b.l; } int read() { int r=0,f=1; char p=getchar(); while(p>'9'||p<'0') { if(p=='-') f=-1; p=getchar(); } while(p>='0'&&p<='9') { r=r*10+p-48; p=getchar(); } return r*f; } void pd(int ro) { if(t[ro].lz!=inf) { t[ro<<1].mn=min(t[ro<<1].mn,t[ro].lz); t[ro<<1].lz=min(t[ro<<1].lz,t[ro].lz); t[ro<<1|1].mn=min(t[ro<<1|1].mn,t[ro].lz); t[ro<<1|1].lz=min(t[ro<<1|1].lz,t[ro].lz); t[ro].lz=inf; } } void build(int ro,int l,int r) { t[ro].l=l,t[ro].r=r,t[ro].mn=t[ro].lz=inf; if(l==r) return; int mid=(l+r)>>1; build(ro<<1,l,mid); build(ro<<1|1,mid+1,r); } long long ques(int ro,int p) { if(p<st) return 0; if(t[ro].l==t[ro].r) return t[ro].mn; pd(ro); int mid=(t[ro].l+t[ro].r)>>1; if(p<=mid) return ques(ro<<1,p); else return ques(ro<<1|1,p); } void update(int ro,int l,int r,long long v) { if(t[ro].l==l&&t[ro].r==r) { t[ro].mn=min(t[ro].mn,v); t[ro].lz=min(t[ro].lz,v); return; } pd(ro); int mid=(t[ro].l+t[ro].r)>>1; if(r<=mid) update(ro<<1,l,r,v); else if(l>mid) update(ro<<1|1,l,r,v); else update(ro<<1,l,mid,v),update(ro<<1|1,mid+1,r,v); t[ro].mn=min(t[ro<<1].mn,t[ro<<1|1].mn); } int main() { n=read(),st=read(),ed=read(); for(int i=1;i<=n;i++) a[i].l=read(),a[i].r=read(),a[i].v=read(); sort(a+1,a+1+n,cmp); build(1,st,ed); for(int i=1;i<=n;i++) { long long nw=ques(1,a[i].l-1); if(nw==inf) { puts("-1"); return 0; } update(1,a[i].l,a[i].r,a[i].v+nw); } long long ans=ques(1,ed); printf("%lld\n",ans==inf?-1ll:ans); return 0; } /* 3 0 4 0 2 3 3 4 2 0 0 1 */
相关文章推荐
- bzoj1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚
- BZOJ_1672_[Usaco2005 Dec]Cleaning Shifts 清理牛棚_动态规划+线段树
- 【bzoj1672】[Usaco2005 Dec]Cleaning Shifts 清理牛棚
- bzoj 1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚(DP)
- 【BZOJ】1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚(dp/线段树)
- 【BZOJ1672】[Usaco2005 Dec]Cleaning Shifts 清理牛棚 动态规划
- 【bzoj1672】[USACO2005 Dec]Cleaning Shifts 清理牛棚 dp/线段树
- [BZOJ1672]Usaco 2005 Dec Cleaning Shifts 清理牛棚
- 1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚
- 1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚 DP + 线段树 / SPFA
- BZOJ 1672 Usaco 2005 Dec Cleaning Shifts 清理牛棚 动态规划
- bzoj1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚
- BZOJ1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚
- BZOJ1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚
- bzoj1672【Usaco2005Dec】Cleaning Shifts 清理牛棚
- bzoj 1731: [Usaco2005 dec]Layout 排队布局
- [bzoj3389][Usaco2004Dec]Cleaning Shifts安排值班_最短路
- BZOJ 1673 USACO 2005 Dec Scales 天平
- 【BZOJ】3389: [Usaco2004 Dec]Cleaning Shifts安排值班
- BZOJ1671: [Usaco2005 Dec]Knights of Ni