标签:size struct head priority set names next make ||
#include <bits/stdc++.h>
using namespace std;
#define maxn 100005
struct Edge
{
int v,w,next;
} edge[maxn];
int head[maxn];
int cnt;
int n,m;
void addedge(int u,int v,int w)
{
edge[cnt].v=v;
edge[cnt].w=w;
edge[cnt].next=head[u];
head[u]=cnt++;
}
bool vis[maxn];
int dist[maxn];
void Dijkstra(int s)
{
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
memset(dist,-1,sizeof(dist));
dist[s]=0;
q.push(make_pair(0,s));
while(!q.empty())
{
int u=q.top().second;
q.pop();
if(vis[u]==true) continue;
vis[u]=true;
for(int i=head[u]; i!=-1; i=edge[i].next)
{
int v=edge[i].v;
int w=edge[i].w;
if((dist[v]>dist[u]+w||dist[v]==-1)&&!vis[v])
{
dist[v]=dist[u]+w;
q.push(make_pair(dist[v],v));
}
}
}
}
int main()
{
int st,en;
scanf("%d%d%d%d",&n,&m,&st,&en);
memset(head,-1,sizeof(head));
for(int i=1; i<=m; i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
addedge(x,y,z);
addedge(y,x,z);
}
Dijkstra(st);
printf("%d\n",dist[en]);
return 0;
}
标签:size struct head priority set names next make ||
原文地址:https://www.cnblogs.com/xiaolaji/p/9746821.html