#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int MAXN = 50010;
const int INF = 100000000;
struct Edge
{
int u, v, w;
}edges[MAXN];
int dist[MAXN];
int n, l, r;
void Inite()
{
memset(dist, 0, sizeof(dist));
l = INF;
r = 1;
}
void Bellman_Ford()
{
bool flag = true;
while( flag )
{
int i;
flag = false;
for(i = 0; i < n; ++i)
{
if( dist[ edges[i].v ] > dist[ edges[i].u ] + edges[i].w)
{
dist[ edges[i].v ] = dist[ edges[i].u ] + edges[i].w;
flag = true;
}
}
for(i = l; i <= r; ++i)
{
if( dist[i] > dist[i-1] + 1 )
{
dist[i] = dist[i-1] + 1;
flag = true;
}
}
for(i = r; i >= l; --i)
{
if(dist[i-1] > dist[i])
{
dist[i-1] = dist[i];
flag = true;
}
}
}
return ;
}
int main()
{
while(~scanf("%d", &n))
{
Inite();
int i;
int u, v, w;
for(i = 0; i < n; ++i)
{
cin>>u>>v>>w;
edges[i].u = v;
edges[i].v = u -1;
edges[i].w = -w;
if( l > u )
l = u;
if( r < v )
r = v;
}
Bellman_Ford();
cout<<dist[r] - dist[l-1]<<endl;
}
return 0;
}
poj 1201
最新推荐文章于 2022-01-26 15:56:35 发布