有无大佬帮忙,看一看我写的dij 改了好久不知道错哪
查看原帖
有无大佬帮忙,看一看我写的dij 改了好久不知道错哪
951549
SiWangba楼主2023/8/3 14:08

样例输出 0 1 5 3

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N=200100,M=500010,INF=0x3f3f3f3f;
int h[N],e[M],ne[M],idx,w[M];
long long  dist[N];
bool st[N];
int n,m,s;
void add(int a,int b,int p)
{
   
    e[idx]=b;
    w[idx]=p;
    ne[idx]=h[a];
    h[a]=idx++;
}
void dijkstra()
{
   memset(dist,INF,sizeof dist);
   dist[s] = 0;
   priority_queue<PII,vector<PII>,greater<PII>> heap;//根堆
   heap.push({0,s});
   while(heap.size())
   {
       auto t=heap.top();
       heap.pop();
       int ver=t.second,dis=t.first;
       if(st[ver]) continue;
       st[ver]=true;
      for(int i=h[ver];i!=-1;i=ne[i])
      {
          int j=e[i];
          if(dist[j]>dis+w[j])
          {
              dist[j]=dis+w[j];
              heap.push({dist[j],j});
          }
      }
   }
}
int main()
{
    memset(h,-1,sizeof h);
    cin>>n>>m>>s;
    for(int i=1;i<=m;i++)
    {
        int a,b,c;
        cin>>a>>b>>c;
        add(a,b,c);
    }
    dijkstra();
    for(int i=1;i<=n;i++)
    {
        cout<<dist[i]<<" ";
    }
   
}
2023/8/3 14:08
加载中...