mxqz
  • 板块UVA1723 Intervals
  • 楼主BugGod
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/9/10 20:57
  • 上次更新2023/11/2 21:32:43
查看原帖
mxqz
541254
BugGod楼主2023/9/10 20:57
#include<bits/stdc++.h>
using namespace std;
int n,t,vis[500010],to[500010],head[500010],nxt[500010],edge[500010],cnt,dist[500010];
queue<int>q;
void add(int from,int t,int dis)
{
	to[++cnt]=t;
	edge[cnt]=dis;
	nxt[cnt]=head[from];
	head[from]=cnt;
}
void SPFA()
{
	memset(dist,-1,sizeof(dist));
	memset(vis,0,sizeof(vis));
	dist[0]=0;
	vis[0]=1;
	q.push(0);
	while(q.size())
	{
		int u=q.front();
		q.pop();
		vis[u]=0;
		for(int i=head[u];i;i=nxt[i])
		{
			int v=to[i],w=edge[i];
			if(dist[v]<dist[u]+w)
			{
				dist[v]=dist[u]+w;
				if(vis[v]==0)
				{
					vis[v]=1;
					q.push(v);
				}
			}
		}
	}
}
int main()
{
	scanf("%d\n",&t);
	scanf("\n");
	for(int q=1;q<=t;q++)
	{
		cnt=0;
		int maxx=-1;
		memset(to,0,sizeof(to));
		memset(head,0,sizeof(head));
		memset(nxt,0,sizeof(nxt));
		memset(edge,0,sizeof(edge));
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
		{
			int u,v,w;
			cin>>u>>v>>w;
			add(u,v+1,w);
			maxx=max(maxx,v);
		}
		for(int i=1;i<=maxx+1;i++)
		{
			add(i,i-1,-1);
			add(i-1,i,0);
		}
		SPFA();
		printf("%d",dist[maxx+1]);
		if(q<t)cout<<endl;
	}
	return 0;
}

样例已过,调得快疯了。

2023/9/10 20:57
加载中...