#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <cstring>
#define N 50005
#define M 200000
// d[i]的初始化
using namespace std;
const int inf = (-1u >> 1);
int e;
struct intval{
int l, r;
int c;
};
intval s[N];
int d[N], first[N];
int u[M], v[M] , w[M], next[M];
bool inq[N];
void addE(int x, int y, int c)
{
next[e] = first[x], first[x] = e;
u[e] = x, v[e] = y;
w[e] = c;
e++;
}
int SPFA(int s, int n)
{
for (int i = 0; i < n; i++)d[i] = -inf;
d[s] = 0;
queue<int> q;
for (int i = 0; i < n; i++)inq[i] = false;
q.push(s);
while (!q.empty())
{
int x = q.front();q.pop();
inq[x] = false;
for (int e = first[x]; e != -1; e = next[e])if (d[v[e]] < d[u[e]] + w[e])
{
d[v[e]] = d[u[e]] + w[e];
if (!inq[v[e]])
{
inq[v[e]] = true;
q.push(v[e]);
}
}
}
return d[n - 1];
}
int main()
{
int n, m;
//FILE* fp = fopen("in.txt", "r");
while (scanf( "%d", &m) != EOF)
{
int a, b, c;
n = -(inf);
e = 0;
for (int i = 0;i < m; i++)
{
scanf( "%d %d %d", &s[i].l, &s[i].r, &s[i].c);
n = max(n, s[i].r);
}
for (int i = 0; i <= n + 1; i++)first[i] = -1;
for (int i = 0; i < m; i++)
addE(s[i].l, s[i].r + 1, s[i].c);
for (int i = 0; i <= n; i++)
{
addE(i, i + 1, 0);
addE(i + 1, i, -1);
}
printf("%d\n", SPFA(0, n + 2));
//getchar();
}
return 0;
}
POJ 1201 Intervals (差分约束#4)
最新推荐文章于 2020-02-05 18:08:07 发布