社区讨论

mxqz

UVA1723Intervals参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo1h6g6o
此快照首次捕获于
2023/10/22 20:59
2 年前
此快照最后确认于
2023/11/02 21:32
2 年前
查看原帖
CPP
#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;
}
样例已过,调得快疯了。

回复

2 条回复,欢迎继续交流。

正在加载回复...