算法训练-最短路

用到SPFA,详解请参考点击打开链接,最短路的4种算法总结->点击打开链接

题目:

  • 179

算法训练 最短路  
时间限制:1.0s   内存限制:256.0MB
       
问题描述

给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环)。请你计算从1号点到其他点的最短路(顶点从1到n编号)。

输入格式

第一行两个整数n, m。

接下来的m行,每行有三个整数u, v, l,表示u到v有一条长度为l的边。

输出格式
共n-1行,第i行表示1号点到i+1号点的最短路。
样例输入
3 3
1 2 -1
2 3 -1
3 1 2
样例输出
-1
-2
数据规模与约定

对于10%的数据,n = 2,m = 2。

对于30%的数据,n <= 5,m <= 10。

对于100%的数据,1 <= n <= 20000,1 <= m <= 200000,-10000 <= l <= 10000,保证从任意顶点都能到达其他所有顶点

==================================

在用SPFA算法时,注意每个题目数据量。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include
#define ll long long
#define N 100000+10
#define INF 0x3f3f3f3f
using namespace std;
int n,m;
int x,y,z;
bool v[20005];
int d[20005];
	struct node
	{
		int y,z;
	};
	vectore[20005];//vector 
	void spfa(int x){
	memset(v,0,sizeof(v));//markable
	d[x]=0;
	queueq;
	q.push(x);
	v[x]=1;
	while(!q.empty()){
		int st=q.front();
		q.pop();
		v[st]=0;
		for(int i=0;i>n>>m;
		memset(d,INF,sizeof(d));
		for(int i=1;i<=m;i++){
			cin>>x>>y>>z;
			e[x].push_back((node){y,z});
		//e[y].push_back((node){x,z});//save 无向图 
		}
		spfa(1);
		for(int i=2;i<=n;i++){
			cout<



你可能感兴趣的:(lanqiao,spfa)