P1807最长路SPFA求助
  • 板块P1807 最长路
  • 楼主wanxuhang
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/1/11 22:45
  • 上次更新2024/1/12 14:33:14
查看原帖
P1807最长路SPFA求助
1052007
wanxuhang楼主2024/1/11 22:45
#include<bits/stdc++.h>
using namespace std;
int n,m;
int flag=0;
int tot=0;
int head[150005];
int dist[150005],visited[150005];
struct edge{
	int nxt;
	int w;
	int to;
}e[500005];
void addEdge(int u,int v,int w){
	e[++tot].to=v;
	e[tot].w=w;
	e[tot].nxt=head[u];
	head[u]=tot;
}
void spfa(int x){
	memset(dist,0x7f,sizeof(dist));
	memset(visited,0,sizeof(visited));
	queue<int> q;
	dist[x]=0,visited[x]=1;
	q.push(x);
	while (!q.empty()){
		int u=q.front();
		q.pop();
		visited[u]=1;
		for (int i=head[u];i;i=e[i].nxt){
			int v=e[i].to,w=e[i].w;
			if (dist[v]>dist[u]+w){
				dist[v]=dist[u]+w;
				if (!visited[v]){
					q.push(v);
					visited[v]=1;
				}
				if(v==n)
                 flag=1;
			}
		}
	}
}
int main(){
	cin>>n>>m;
	for (int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		addEdge(u,v,w);
	}
	spfa(1);
	if (flag) cout<<dist[n];
	else cout<<-1;
	return 0;
}
2024/1/11 22:45
加载中...