洛谷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]); }
博客转载必须注出处!