spfa求调
查看原帖
spfa求调
667558
_Kamisato_Ayaka_楼主2024/8/22 09:39
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 1e5 + 10;
int n,m,idx=1,head[MAXN << 1],dis[MAXN << 1];
bool vis[MAXN << 1];
struct node{
	int v,w,nxt;
}edge[MAXN << 1];
inline void add(int u,int v,int w){
	edge[idx].v = v;
	edge[idx].w = w;
	edge[idx].nxt = head[u];
	head[u] = idx ++;
}
inline void spfa(){
	queue<int>q;
	dis[1] = 0;
	q.push(1);
	while(!q.empty()){
		int u = q.front();
		q.pop();
		for(int i=head[u];i!=-1;i=edge[i].nxt){
			int v = edge[i].v,w = edge[i].w;
			if(dis[v] > dis[u] + w){
				dis[v] = dis[u] + w;
				if(!vis[v]){
					vis[v] = 1;
					q.push(v);
				}
			}
		}
	}
}
signed main(){
	memset(dis,0x3f,sizeof dis);
	memset(head,-1,sizeof head);
	scanf("%lld%lld",&n,&m);
	const int Inf = dis[1];
	for(int i=1;i<=m;i++){
		int l,r,c;
		scanf("%lld%lld%lld",&l,&r,&c);
		add(l,r,c);
	}
	for(int i=n;i>1;i--)
		add(i,i-1,0);
	spfa();
	if(dis[n] == Inf)
		printf("-1\n");
	else
		printf("%lld\n",dis[n]);	
	return 0;
}
2024/8/22 09:39
加载中...