1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
#define rep(i,x,y) for(register int i=x;i<=y;++i) #define repd(i,x,y) for(register int i=x;i>=y;--i) #define ll long long const int N=1e5+7; const int inf=0x3f3f3f3f; using namespace std; int n,m,cnt,mx,mn,nxt[N],w[N],to[N],head[N],dis[N],inq[N]; inline void (int a,int b,int c){ w[++cnt]=c; to[cnt]=b; nxt[cnt]=head[a]; head[a]=cnt; } queue<int>q; void spfa(){ q.push(mn); inq[mn]++;dis[mn]=0; while(!q.empty()){ int k=q.front(); q.pop();inq[k]--; for(int i=head[k],v;i;i=nxt[i]){ if(dis[v=to[i]]>=dis[k]+w[i])continue; dis[v]=dis[k]+w[i]; if(!inq[v]){q.push(v);inq[v]++;} } } } int main(){ while(~scanf("%d",&n)){ mx=0;mn=inf; memset(head,0,sizeof head); memset(dis,0,sizeof dis); rep(i,1,n){ int a,b,c; scanf("%d%d%d",&a,&b,&c); mx=max(mx,b); mn=min(mn,a); adde(a-1,b,c); } rep(i,mn,mx)adde(i-1,i,0),adde(i,i-1,-1),dis[i]=-inf; spfa(); printf("%dn",dis[mx]); } return 0; }
|
近期评论