35. Shortest Path Algorithm (Standard)
#include<bits/stdc++.h>
using namespace std;
#define maxn 200010
#define inf 0x3fffffff
int n,m,s;
int v[maxn];
long long ans[maxn];
bool vis[maxn];
typedef struct
{
int index;
int w;
int next;
}en[maxn];
en e;
typedef struct node
{
long long u,ws;
bool operator<(const node &x) const
{
return x.ws<ws;
}
}node;
void createg()
{
cin>>n>>m>>s;
int r,c,ww;
for(int i=1;i<=m;i++)
{
cin>>r>>c>>ww;
e[i].index=c;
e[i].w=ww;
e[i].next=v[r];
v[r]=i;
}
}
void djistra()
{
for(int i=1;i<=n;i++)
{
ans[i]=inf;
}
ans[s]=0;
priority_queue<node> Q;
Q.push((node){s,0});
while(!Q.empty())
{
node fr = Q.top();Q.pop();
int s = fr.u;
if(vis[s]) continue;
vis[s]=true;
for(int i=v[s];i!=0;i=e[i].next)
{
if(ans[e[i].index]>ans[s]+e[i].w)
{
ans[e[i].index]=ans[s]+e[i].w;
if(!vis[e[i].index])
Q.push((node){e[i].index,ans[e[i].index]});
}
}
}
}
void printsg()
{
for(int i=1;i<n;i++)
{
printf("%lld ",ans[i]);
}
printf("%lld",ans[n]);
}
int main()
{
createg();
djistra();
printsg();
return 0;
}
1. Dijkstra + Priority_queue
1. About priority_queue
-
#include<queue>
-
definition
typedef struct node { long long u,ws; bool operator>(const node &x) const { return x.ws<ws; } }node; priority_queue<node> Q;
-
priority to input greater data