POJ 3159 最短路 SPFA

#include<iostream>
using namespace std;
const int nMax = 30005;
const int mMax = 150005;
const int inf = 1000000000;

struct node{
    int v, w, next;
}edge[mMax];
int n, edgeHead[nMax], dict[nMax];
int stack[nMax];
bool vis[nMax];

void spfa(){
    for(int i = 2; i <= n; i ++)
        dict[i] = inf;
    dict[1] = 0;
    int top = 0;     //  spfa的堆栈实现模板。
    stack[++ top] = 1;
    vis[1] = true;
    while(top){
        int u = stack[top --];
        for(int p = edgeHead[u]; p != 0; p = edge[p].next){
            int v = edge[p].v;
            if(dict[v] > dict[u] + edge[p].w){
                dict[v] = dict[u] + edge[p].w;
                if(!vis[v]){
                    vis[v] = true;
                    stack[++ top] = v;
                }
            }
        }
        vis[u] = false;
    }
}

int main(){
    int m, i;
    scanf("%d%d", &n, &m);
    int k = 1;
    while(m --){
        int u, v, w;
        scanf("%d%d%d", &u, &v, &w);
        edge[k].v = v;
        edge[k].w = w;
        edge[k].next = edgeHead[u];
        edgeHead[u] = k ++;
    }
    spfa();
    printf("%d\n", dict[n]);
    return 0;
}
时间: 2024-10-09 11:37:49

POJ 3159 最短路 SPFA的相关文章

It&amp;#39;s not a Bug, It&amp;#39;s a Feature! (poj 1482 最短路SPFA+隐式图+位运算)

Language: Default It's not a Bug, It's a Feature! Time Limit: 5000MS   Memory Limit: 30000K Total Submissions: 1353   Accepted: 516 Description It is a curious fact that consumers buying a new software product generally do not expect the software to

POJ 3159 Candies(SPFA+栈)差分约束

题目链接:http://poj.org/problem?id=3159 题意:给出m给 x 与y的关系.当中y的糖数不能比x的多c个.即y-x <= c  最后求fly[n]最多能比so[1] 多多少糖? 差分约束问题, 就是求1-n的最短路,  队列实现spfa 会超时了,改为栈实现,就可以 有负环时,用栈比队列快 数组开小了,不报RE,报超时 ,我晕 #include <iostream> #include <cstdlib> #include <cstdio>

POJ 3159 Candies(SPFA+栈)

题目链接:http://poj.org/problem?id=3159 题意:给出m给 x 与y的关系,其中y的糖数不能比x的多c个,即y-x <= c  最后求fly[n]最多能比so[1] 多多少糖? 差分约束问题, 就是求1-n的最短路,  队列实现spfa 会超时了,改为栈实现,即可 有负环时,用栈比队列快 数组开小了,不报RE,报超时 ,我晕 #include <iostream> #include <cstdlib> #include <cstdio>

poj 2387 最短路 spfa 实现

http://poj.org/problem?id=2387 题目大意就是求最短路,从n到1的最短路.就用来熟悉一下spfa的写法. 一开始贡献了好几次wa,结果发现是因为n,m写反了.... 没有什么拐弯的地方,来熟悉spfa直接附上代码: #include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <vector> using names

POJ 1511 最短路spfa

题很简单 就是有向图中求给出的源点到其余所有点的最短路的和与其余所有点到源点的最短路之和 一开始以为dij对于正权图的单源最短路是最快的 写了一发邻接表的dij 结果超时 把所有的cin改成scanf 还是超时(过去并没有用cin的坏习惯..近两个星期才开始疯狂的使用cin..因为懒..) 后来想了一下 spfa也可以求单源最短路 就试着写了一发scanf 然后wa...看了半天题目 发现是有很大可能爆int的 改了后1800+msAC 用cin仍然超时 所以cin害人不浅 scanf大法好23

poj 3159 差分约束+spfa

由于此题数据特殊,队列优化的spfa会超时,可以改成用栈来优化. 1 #include <algorithm> 2 #include <iostream> 3 #include <cstring> 4 #include <cstdio> 5 using namespace std; 6 7 const int INF = 9999999; 8 const int N = 30001; 9 const int M = 150000; 10 int head[N

POJ 2448(K短路,A*+SPFA) Remmarguts&#39; Date

题意 给一个n个点m条边的图,然后给一个起点和一个终点,求起点到终点的第K短路. 思路 求第K短路.一个经典的问题. SPFA+A* 核心思想在A*搜索的估计函数的建立上. F(x) = g(x) + h(x) 估价函数 = s到x的距离 + x到t的距离 估价函数的含义就是经过x这个点的路径的距离. 我们在搜索的时候每次选择估价函数较小的值,进行拓展.这样我们搜索到t点的状态出来顺序就是,最短路-次短路-.第三短路- 就减少了我们搜索的状态数. 代码实现上,实现一个估价函数的结构体,然后是实现

POJ 3159 Candies(差分约束系统)

题目地址:POJ 3159 第一发差分约束的题..就当作最短路来做了...直接建图+spfa..不过我用的spfa+slf优化都超时..看了讨论区里的..把spfa换成栈就过了... 代码如下: #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #include

POJ 3126 Prime Path SPFA

http://poj.org/problem?id=3126 题目大意: 给你两个四位的素数s和t,要求每次改变一个数字,使得改变后的数字也为素数,求s变化到t的最少变化次数. 思路: 首先求出所有4位素数. 对于两个素数之间,如果只相差一个数字,那么就建立图,(双向) 最后求最短路即可(可以SPFA也可以BFS) #include<cstdio> #include<cstring> #include<queue> #include<algorithm> u