蒟蒻SPFA求调!
  • 板块学术版
  • 楼主iamsh
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/5/18 22:17
  • 上次更新2023/10/23 15:24:07
查看原帖
蒟蒻SPFA求调!
656427
iamsh楼主2023/5/18 22:17

题目大意

给定M条边N个点的带权(有正有负)有向图。求 1 到 N 的最短路,如果 1 无法到达 N 输出 -1。不存在负环。

我的代码

题目测试点能过一部分,有些RE有些WA

#include<bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
int n,m,cnt,dis[N],vis[N],head[N];
struct inf
{
    int to,len,nxt;
}edge[N];
queue<int> q;
void add(int u,int v,int w)
{
	cnt ++;
    edge[cnt].to = v;
    edge[cnt].len = w;
    edge[cnt].nxt = head[u];
    head[u] = cnt;
}
void spfa(int s)
{
	memset(dis,0x3f,sizeof dis);
    dis[s] = 0;
    vis[s] = 1;
    q.push(s);
    while(q.empty() == 0)
    {
    	int now = q.front();
    	q.pop();
		for(int i = head[now];i != 0;i = edge[i].nxt)
        {
        	int t = edge[i].to;
        	dis[t] = min(dis[t],dis[now] + edge[i].len);
        	if(vis[t] == 0)
        	{
        		vis[t] = 1;
        		q.push(t);
			}
		}
	}
}
int main()
{
    scanf("%d %d",&n,&m);
	for(int i = 1;i <= m;i ++)
	{
		int u,v,len;
		scanf("%d %d %d",&u,&v,&len);
		add(u,v,len);
	}
    spfa(1);
    if(dis[n] > 0x3f3f3f3f / 2)
	{
		printf("-1");
		return 0;
	}
    printf("%d",dis[n]);
    return 0;
}//QWQ
2023/5/18 22:17
加载中...