洛谷P1339 [USACO09OCT]热浪Heat Wave 题解

题目传送门

这道题实际非常简单好奇是怎么变黄的...

其实也就是一个SPFA,本人非常懒,不想打领接表,直接用矩阵就好啦...

#include<bits/stdc++.h>
using namespace std;
int n,a[2510][2510],m,fr,to;
void add(int x,int y,int z){a[x][y]=z;}
int dis[2510];
bool vis[2510];
queue<int> q;
void SPFA(int from){
    vis[from]=1;
    q.push(from);dis[from]=0;
    while(!q.empty()){
        int p=q.front();vis[p]=0;
        q.pop();
        for(int i=1;i<=n;i++){
            if(a[p][i]!=0&&dis[i]>dis[p]+a[p][i]){
                dis[i]=dis[p]+a[p][i];
                if(vis[i]==0){
                    vis[i]=1;
                    q.push(i);
                }
            }
        }
    }
}
int main(){
    scanf("%d%d%d%d",&n,&m,&fr,&to);
    for(int i=1;i<=m;i++){
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        add(x,y,z);
        add(y,x,z);
    }
    memset(dis,127,sizeof(dis));
    SPFA(fr);
    printf("%d\n",dis[to]);
}

猜你喜欢

转载自www.cnblogs.com/yzx1798106406/p/9163372.html
今日推荐