http://poj.org/problem?id=1201
#include<bits/stdc++.h> using namespace std; const int maxn=50004; int dis[maxn],vis[maxn]; int head[maxn]; int cnt=0; struct node{ int to,next,w; }e[maxn<<2]; inline void add(int u,int v,int w){ e[++cnt].to=v;e[cnt].next=head[u];e[cnt].w=w;head[u]=cnt; } inline void spfa(int s){ queue<int>q; q.push(s); dis[s]=0; vis[s]=1; while(!q.empty()){ int x=q.front();q.pop(); cout<<x<<' '<<dis[x]<<endl; for(int i=head[x];i!=-1;i=e[i].next){ int v=e[i].to; if(dis[v]>dis[x]+e[i].w){ dis[v]=dis[x]+e[i].w; if(!vis[v]) { q.push(v); vis[v]=1; } } } vis[x]=0; } } int main(){ memset(head,-1,sizeof(head)); for(int i=0;i<=50000;i++) add(i,i+1,1),add(i+1,i,0); int n;cin>>n; for(int i=1;i<=n;i++){ int x,y,z;scanf("%d%d%d",&x,&y,&z); //add(x,y+1,z); add(y+1,x,-z); } memset(dis,0x3f,sizeof(dis)); spfa(0); cout<<dis[50001]; }