这题搞的我真想砸电脑了,写了一边跑不出来,后来又重写了四遍才过,至今为止还不知道第一遍错在哪里了,很是蛋疼
#include<iostream>
#include<cstdio>
#include<list>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<cmath>
#include<memory.h>
#define ll long long
#define LL __int64
const ll INF=9999999999;
using namespace std;
vector<int>G[100002];
#define MAX 50010
using namespace std;
int head[MAX],dis[MAX],maxn,minn,cnt;
bool vis[MAX];
struct Node
{
int to,value,next;
}e[4*MAX];
void clear()
{
memset(head,-1,sizeof(head));
cnt=0;
}
void add(int u,int v,int w)
{
e[cnt].to=v;
e[cnt].value=w;
e[cnt].next=head[u];
head[u]=cnt++;
}
int spfa()
{
int u,v;
memset(vis,false,sizeof(vis));
memset(dis,-1,sizeof(dis));
queue<int>q;
while(!q.empty())
q.pop();
q.push(minn);
dis[minn]=0;vis[minn]=true;
while(!q.empty())
{
u=q.front();q.pop();
vis[u]=false;
for(int i=head[u];i!=-1;i=e[i].next)
{
v=e[i].to;
if(dis[v]<dis[u]+e[i].value)
{
dis[v]=dis[u]+e[i].value;
if(!vis[v])
{
q.push(v);
vis[v]=true;
}
}
}
}
return dis[maxn];
}
int main()
{
int n,u,v,w,i;
while(cin>>n)
{
clear();
minn=MAX;
maxn=0;
for(i=0;i<n;i++)
{
cin>>u>>v>>w;
if(minn>u) minn=u;
if(maxn<v+1) maxn=v+1;
add(u,v+1,w);
}
for(i=minn;i<=maxn;i++)
{
add(i,i-1,-1);
add(i-1,i,0);
}
int ans=spfa();
cout<<ans<<endl;
}
return 0;
}