最短路模板,加一个判断一下最后一步dis[n]与inf关系,若大于等于,那就输出qwb baka就成。
#include <bits/stdc++.h>
using namespace std;
int n,m;
const int maxn=200005;
const int inf=0x3f3f3f3f;
struct node
{
int v;
int w;
node(int v,int w):v(v),w(w){}
bool operator<(const node & t)const
{
return w>t.w;
}
};
vector<node>dij[maxn];
int vis[maxn];
int dis[maxn];
void dijkstra(int s)
{
memset(vis,0,sizeof(vis));
memset(dis,inf,sizeof(dis));
dis[s]=0;
priority_queue<node> Q;
Q.push(node(s,dis[s]));
while(!Q.empty())
{
int u=Q.top().v; //点
Q.pop();
if(vis[u])
continue;
vis[u]=1;
for(int i=0;i<dij[u].size();i++)
{
int v=dij[u][i].v;
int w=dij[u][i].w;
if(dis[v]>dis[u]+w)
{
dis[v]=dis[u]+w;
Q.push(node(v,dis[v]));
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<m;i++)
{
int u,v,w;
cin>>u>>v>>w;
dij[u].push_back(node(v,w));
dij[v].push_back(node(u,w));
}
dijkstra(1);
if(dis[n]>=inf)
printf("qwb baka\n");
else
cout<<dis[n]<<endl;
return 0;
}另外一个基本一样的,为了熟悉模板qaq
#include<bits/stdc++.h>
#define pii pair<int,int>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=200005;
struct node
{
int to; //终点
int s; //权值
};
vector<node> f[maxn];
int dis[maxn];
int vis[maxn];
int n,m;
void dijkstra(int t)
{
memset(dis,inf,sizeof(dis));
memset(vis,0,sizeof(vis));
priority_queue<pii,vector<pii>,greater<pii> > q;
dis[t]=0;
q.push(pii(0,t));
while(!q.empty())
{
pii x=q.top();
q.pop();
int tt=x.second;
if(vis[tt])
{
continue;
}
vis[tt]=1;
for(int i=0;i<f[tt].size();i++)
{
node a=f[tt][i];
if(dis[a.to]>dis[tt]+a.s)
{
dis[a.to]=dis[tt]+a.s;
q.push(pii(dis[a.to],a.to));
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u,v,w;
cin>>u>>v>>w;
f[u].push_back({v,w});
f[v].push_back({u,w});
}
dijkstra(1);
if(dis[n]>=inf)
{
cout<<"qwb baka"<<endl;
}
else
{
cout<<dis[n]<<endl;
}
return 0;
}
京公网安备 11010502036488号