最短路32pts
  • 板块学术版
  • 楼主jwhou
  • 当前回复6
  • 已保存回复8
  • 发布时间2024/12/28 22:02
  • 上次更新2024/12/29 11:20:35
查看原帖
最短路32pts
366297
jwhou楼主2024/12/28 22:02
#include<bits/stdc++.h>
using namespace std;
void add(int u,int v,int w,int i);
void dijkstra();

const int N=1e5+2,M=2e5+2;
struct edge{
    int dis,to,next;
}e[M];
int n,m,s,u,v,w,head[N],dist[N];
priority_queue<pair<int,int> >pq;
bool t[N];

int main()
{
    cin>>n>>m>>s;
    for(int i=1;i<=m;i++)
    {
        cin>>u>>v>>w;
        add(u,v,w,i);
    }
    for(int i=1;i<=n;i++)
        dist[i]=0x7fffffff;
    dijkstra();
    for(int i=1;i<=n;i++)
        cout<<dist[i]<<" ";
    return 0;
}
void add(int u,int v,int w,int i)
{
    e[i].dis=w;
    e[i].to=v;
    e[i].next=head[u];
    head[u]=i;
}
void dijkstra()
{
    dist[s]=0;
    pq.push(make_pair(s,0));
    while(!pq.empty())
    {
        u=pq.top().first;
        pq.pop();
        if(t[u])
            continue;
        t[u]=1;
        for(int i=head[u];i;i=e[i].next)
            if(dist[u]+e[i].dis<dist[e[i].to])
            {
                dist[e[i].to]=dist[u]+e[i].dis;
                pq.push(make_pair(e[i].to,-dist[e[i].to]));
            }
    }
}
2024/12/28 22:02
加载中...