bzoj 2292: 【POJ Challenge 】永远挑战 SPFA

来源:互联网 发布:室内定位 指纹算法 编辑:程序博客网 时间:2024/05/22 15:59

→题目链接←

我居然没有一发A掉这个水题,真是差劲

犯了一个极其愚蠢的错误

重写了一遍就A了

然而我旁边某t姓同学告诉我说这道题djkstra

然而我并不能分清djkstra和spfa的区别orz

A掉了就好


一个裸的最短路,貌似用什么方法都能过。


代码:

#include<iostream>#include<vector>#include<queue>#include<cstdio>using namespace std;struct node{int to,len;int now;};int n,m;vector<node>v[100010];queue<node>q;int Min[100010];bool vis[100010];void link(int x,int y,int z){node t;t.to=y;t.len=z;v[x].push_back(t);}int main(){scanf("%d%d",&n,&m);for(int i=1; i<=n; i++)Min[i]=2333333;for(int i=0; i<m; i++){int x,y,z;scanf("%d%d%d",&x,&y,&z);link(x,y,z);}node t;t.now=1;t.len=0;q.push(t);Min[1]=0;vis[1]=true;while(!q.empty()){t=q.front();q.pop();if(t.now==n)continue;for(int i=0; i<v[t.now].size(); i++){int to=v[t.now][i].to;int len=v[t.now][i].len;if(Min[to]>Min[t.now]+len){Min[to]=Min[t.now]+len;if(!vis[to]){node t1=t;t1.now=to;t1.len+=len;vis[to]=true;q.push(t1);}}}vis[t.now]=false;}printf("%d\n",Min[n]);return 0;}


原创粉丝点击