洛谷P1339 热浪 (SPFA)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pengwill97/article/details/79966134

题意分析

SPFA裸题

代码总览

#include<bits/stdc++.h>
using namespace std;
const int nmax = 6500;
const int mmax = 2550;
typedef struct{
    int to,nxt,w;
}Edge;
Edge e[nmax<<2];
int n,m,s,t,tot = 0;
int head[nmax<<1],dis[mmax];
void add(int u,int v, int w){
    e[tot].to = v;
    e[tot].nxt = head[u];
    e[tot].w = w;
    head[u] = tot++;
}
void spfa(){
    memset(dis,0x3f3f3f3f,sizeof dis);
    dis[s] = 0;
    bitset<mmax> inque; inque.reset();
    queue<int> q; q.push(s);
    while(!q.empty()){
        int u = q.front(); q.pop(); inque.reset(u);
        for(int i = head[u]; i!=-1;i = e[i].nxt){
            int v = e[i].to, w = e[i].w;
            if(dis[v] > dis[u] + w){
                dis[v] = dis[u] + w;
                if(!inque.test(v)){
                    q.push(v);
                    inque.set(v);
                }
            }
        }
    }
}
int main(){
    scanf("%d %d %d %d",&n,&m,&s,&t);
    memset(head,-1,sizeof head);
    int u ,v, w;
    for(int i = 0;i<m;++i){
        scanf("%d %d %d",&u,&v,&w);
        add(u,v,w); add(v,u,w);
    }
    spfa();
//    for(int i = 1;i<=n;++i) printf("%d\n",dis[i]);
    printf("%d\n",dis[t]);
    return 0;
}
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页