lanqiao OJ 1366 spfa最短路

简介: lanqiao OJ 1366 spfa最短路

用户登录

一个题目的图的规模很大,并且变得权值全部为负数,那么他很可能设置了不利于spfa的测试数据,此时应该用更为稳定的dijkstra算法

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector>
 
using namespace std ;
const long long INF = 0x3f3f3f3f3f3f3f3fLL ;
const int N = 5e3 + 10 ;
struct edge{
  int to ;
  long long w ;
  edge(int too , long long ww){
    to = too , w = ww ;
  }
};
int n , m , s ;
long long dis[N] ;
vector<edge> e[N] ;
bool inq[N] ; 
void spfa(int s){
  memset(dis,0x3f,sizeof(dis)) ;
  dis[s] = 0 ;
  queue<int> q ;
  q.push(s) ;
  inq[s] = 1 ;
  while(!q.empty()){
    int u = q.front() ;
    q.pop() ;
    inq[u] = 0 ;
    if(dis[u] == INF) continue ;
    for(int i = 0 ; i < e[u].size() ; i ++){
      int v = e[u][i].to ;
      long long w= e[u][i].w;
      if(dis[v] > dis[u] + w){
        dis[v] = dis[u] + w ;
        if(inq[v] == 0){
          q.push(v) ;
          inq[v] = 1 ;
        }
      }
    }
  }
}
int main(){
  cin >> n >> m >> s ;
  for(int i = 1 ; i <= m ; i ++){
    int a , b ;  
    long long c ;
    cin >> a >> b >> c ;
    e[a].push_back({b,c}) ;
    //e[b].push_back({a,c}) ;
  }
  spfa(s) ;
  for(int i = 1 ; i <= n ;i ++){
    if(dis[i] == INF) cout << "-1 " ;
    else printf("%lld ", dis[i]) ;
  }
}
目录
相关文章
|
3天前
lanqiao OJ 641 迷宫
lanqiao OJ 641 迷宫
10 0
|
5月前
|
Java
hdu-2544-最短路(SPFA)
hdu-2544-最短路(SPFA)
31 0
|
算法
数星星(树状数组模板题)
数星星(树状数组模板题)
52 0
|
Web App开发 算法
蓝桥杯 floyd算法练习 最短路
蓝桥杯 floyd算法练习 最短路
121 0
蓝桥杯 floyd算法练习 最短路
牛客—— 小A的最短路 (LCA)
牛客—— 小A的最短路 (LCA)
86 0
|
机器学习/深度学习
洛谷P3395-路障(BFS)
洛谷P3395-路障(BFS)
洛谷P3395-路障(BFS)
|
人工智能
线段树水题
Problem Description 很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。 这让很多学生很反感。 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
111 0
HDU-1874,畅通工程续(Floyd最短路)
HDU-1874,畅通工程续(Floyd最短路)