82WA#3,#6玄关
查看原帖
82WA#3,#6玄关
1408054
zhaolt2012楼主2025/7/29 18:00
#include<bits/stdc++.h>
using namespace std;
const int MAXN=300010;
queue<long long>q;
long long v[MAXN],w[MAXN],nxt[MAXN],head[MAXN],idx;
long long t,n,m,dis[MAXN],cnt[MAXN];
bool vis[MAXN],ansb;
void addEdge(long long  uu,long long  vv,long long  ww)
{
	idx++;
	nxt[idx]=head[uu];
	head[uu]=idx;
	v[idx]=vv;
	w[idx]=ww;
}
void spfa()
{
	q.push(1);
	vis[1]=1;
	dis[1]=0;
	while(!q.empty())
	{
		int x=q.front();
		q.pop();
		vis[x]=0;
		for(int i=head[x];i!=0;i=nxt[i])
		{
			long long  vv=v[i];
			if(dis[x]+w[i]>dis[vv])
			{
				dis[vv]=dis[x]+w[i];
				if(++cnt[vv]>=n) return ;
				if(!vis[vv])
				{
					if(vv==n) ansb=1;
					q.push(vv);
					vis[vv]=1;
				}
			}
		}
	}
	return ;
}
int main()
{
	memset(dis,-800000000,sizeof(dis));
	cin>>n>>m;
	long long  uu,vv,ww;
	for(int i=1;i<=m;i++)
	{
		cin>>uu>>vv>>ww;
		if(ww>=0)
		{
			addEdge(uu,vv,ww);
		}
		else addEdge(uu,vv,ww);
	}
	spfa();
	if(ansb)cout<<dis[n];
	else cout<<-1;
}

2025/7/29 18:00
加载中...