//原来是 flag=false的没被括号括进去导致超时
/*
d[i] 表示从0到i(不包括i)最小的个数
*/
#include
int n,max,min;
int d[50005];
int eu[50005],ev[50005],ew[50005];
int Bellman_Ford()
{
int i,k,flag;
//bool flag;
for(i=min;i<=max;i++)
d[i]=-1;
d[min]=0;
for(k=0;k<=max-min;k++)
{
flag=1;
for(i=0;i if(d[eu[i]]!=-1&&d[eu[i]]+ew[i]>d[ev[i]])
{
d[ev[i]]=d[eu[i]]+ew[i];
flag=0;
}
for(i=min;i if(d[i]!=-1&&d[i]>d[i+1])
{
d[i+1]=d[i];
flag=0;
}
for(i=max;i>min;i--)
if(d[i]!=-1&&d[i]-1>d[i-1])
{
d[i-1]=d[i]-1;
flag=0;
}
if(flag)break;
}
return d[max];
}
int main()
{
int i,x,y,z;
while(scanf("%d",&n)!=EOF)
{
min=50005;max=0;
for(i=0;i {
scanf("%d%d%d",&eu[i],&ev[i],&ew[i]);
ev[i]++; //注意这里是根据d[i]的定义来做的处理
if(eu[i] if(ev[i]>max) max=ev[i];
}
printf("%d\n",Bellman_Ford());
}
}
阅读(795) | 评论(0) | 转发(0) |