spfa 54pts求助
  • 板块P1807 最长路
  • 楼主NOIPer40
  • 当前回复1
  • 已保存回复1
  • 发布时间2020/10/28 15:31
  • 上次更新2023/11/5 09:40:35
查看原帖
spfa 54pts求助
185026
NOIPer40楼主2020/10/28 15:31
#include<cstdio>
#include<queue>
#define ll long long
#define maxn 1510
#define maxm 50010
using namespace std;
ll n,m,head[maxn],nxt[maxm],to[maxm],wgh[maxm],cnt,dis[maxn],vis[maxn];
queue<ll> q;
void add(ll u,ll v,ll w){
	nxt[++cnt]=head[u];
	to[cnt]=v;
	wgh[cnt]=w;
	head[u]=cnt;
}
int main(){
	scanf("%lld%lld",&n,&m);
	for(int i=2;i<=n;i++)
		dis[i]=-1e18;
	for(int i=1;i<=m;i++){
		ll u,v,w;
		scanf("%lld%lld%lld",&u,&v,&w);
		add(u,v,w);
	}
	vis[1]=1;
	q.push(1);
	while(!q.empty()){
		int f=q.front();
		q.pop();
		for(int i=head[f];i;i=nxt[i]){
			int ti=to[i],wi=wgh[i];
			if(dis[f]+wi>dis[ti] && dis[f]>=0){
				dis[ti]=dis[f]+wi;
				if(!vis[ti])
					q.push(ti);
				vis[ti]=1;
			}
		}
	}
	if(dis[n]==-1e18)
		printf("-1\n");
	else
		printf("%lld\n",dis[n]);
	return 0;
}
2020/10/28 15:31
加载中...