→题目链接←
我居然没有一发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;
}