→题目链接←
一个裸的最短路,很水的数据貌似怎么跑都行
我用的SPFA...
很弱的代码:
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
struct point{
int to,len;
};
struct node{
int now,len;
};
int Min[2550];
int n,m,s,e;
vector<point>v[2550];
queue<node>q;
bool vis[2550];
void link(int s,int e,int c){
point t;
t.to=e;
t.len=c;
v[s].push_back(t);
t.to=s;
v[e].push_back(t);
}
int main(){
scanf("%d%d%d%d",&n,&m,&s,&e);
for(int i=1; i<=n; i++)Min[i]=2550000,vis[i]=false;
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=s;
t.len=0;
q.push(t);
Min[s]=0;
vis[s]=true;
while(!q.empty()){
t=q.front();
q.pop();
if(t.now==e)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])continue;
node t1=t;
t1.now=to;
t1.len+=len;
vis[to]=true;
q.push(t1);
}
}
vis[t.now]=false;
}
printf("%d\n",Min[e]);
return 0;
}