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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
#include <algorithm> #include <cstring> #include <queue> using namespace std; int u[150100],v[150100],w[150100],fir[150100],nxt[150100],cnt,dis[150100],vis[150100],inq[150100],m,a[150100],b[150100],c[150100]; queue<int> q; void (int ui,int vi,int wi){ ++cnt; u[cnt]=ui; v[cnt]=vi; w[cnt]=wi; nxt[cnt]=fir[ui]; fir[ui]=cnt; } bool spfa(int S){ memset(dis,0x3f,sizeof(dis)); memset(inq,0,sizeof(inq)); memset(vis,0,sizeof(vis)); dis[S]=0; q.push(S); vis[S]=true; inq[S]=1; while(!q.empty()){ int x=q.front(); q.pop(); vis[x]=false; for(int i=fir[x];i;i=nxt[i]){ if(dis[v[i]]>dis[x]+w[i]){ dis[v[i]]=dis[x]+w[i]; if(!vis[v[i]]){ vis[v[i]]=true; q.push(v[i]); inq[v[i]]++; } } } } return true; } int main(){ scanf("%d",&m); int maxx=-0x3f3f3f3f,minx=0x3f3f3f3f; for(int i=1;i<=m;i++){ scanf("%d %d %d",&a[i],&b[i],&c[i]); a[i]++,b[i]++; maxx=max(maxx,max(a[i],b[i])); minx=min(minx,min(a[i],b[i])); } for(int i=1;i<=50000;i++) addedge(i-1,i,1),addedge(i,i-1,0);; for(int i=1;i<=m;i++) addedge(b[i],a[i]-1,-c[i]); spfa(50000); printf("%dn",-dis[0]); return 0; }
|
近期评论