链接:https://ac.nowcoder.com/acm/problem/15549
来源:牛客网
题意:
从城市1到城市n找最短路,有就输出路径长,没有就输出"qwb baka"
思路:
最短路裸题啦,用邻接表建图,然后spfa()一下就好
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=2e5+10,inf=LONG_LONG_MAX;
struct node {
ll to,next,w;
} e[maxn*2];
ll tot=1,n,m,u,v,w,ans=inf,dis[maxn],head[maxn],vis[maxn];
void add(ll u,ll v,ll w) {
e[tot].to=v;
e[tot].w=w;
e[tot].next=head[u];
head[u]=tot++;
}
void spfa(){
queue<ll> q;
q.push(1);
for(int i=1;i<=n;i++) dis[i]=inf;
vis[1]=1,dis[1]=0;
while(!q.empty()){
ll now = q.front();
q.pop();
vis[now]=0;
for(int i=head[now];i;i=e[i].next){
if(dis[e[i].to] > dis[now]+e[i].w){
dis[e[i].to] = dis[now]+e[i].w;
if(!vis[e[i].to]){
vis[e[i].to]=1;
q.push(e[i].to);
}
}
}
}
}
int main() {
cin>>n>>m;
for(int i=0; i<m; i++) {
cin>>u>>v>>w;
add(u,v,w),add(v,u,w);
}
spfa();
if(dis[n]==inf) cout<<"qwb baka"<<endl;
else cout<<dis[n]<<endl;
}