是我自己写的第一个关于差分约束的题目 代码不长
#include<iostream>
#include<cstring>
using namespace std;
#define MAX 60000
#define MAXINT 1000000
struct node
{
int beg,end,val;
}st[MAX];
int dis[MAX],n,Max,Min;
int chafen()
{
int i,j;
for(i=Min;i<=Max;i++)
dis[i]=-MAXINT;
dis[Min]=0;
bool over;
for(i=Min;i<=Max;i++)
{
over=true;
for(j=1;j<=n;j++)
{
if(dis[st[j].beg]!=-MAXINT&&dis[st[j].beg]+st[j].val>dis[st[j].end])
{
dis[st[j].end]=dis[st[j].beg]+st[j].val;
over=false;
}
}
for(j=Min;j<Max;j++)
{
if(dis[j]!=-MAXINT&&dis[j]>dis[j+1])
{
dis[j+1]=dis[j];
over=false;
}
}
for(j=Max;j>Min;j--)
{
if(dis[j]!=-MAXINT&&dis[j]-1>dis[j-1])
{
dis[j-1]=dis[j]-1;
over=false;
}
}
if(over)
break;
}
return dis[Max];
}
int main()
{
while(cin>>n)
{
int i,j;
Max=0;
Min=MAXINT;
for(i=1;i<=n;i++)
{
cin>>st[i].beg>>st[i].end>>st[i].val;
st[i].end++;
if(st[i].beg<Min)
Min=st[i].beg;
if(st[i].end>Max)
Max=st[i].end;
}
cout<<chafen()<<endl;
}
return 0;
}