52分求助,dijkstra+堆优化
查看原帖
52分求助,dijkstra+堆优化
107131
Ancouest楼主2022/7/18 09:38
#include<bits/stdc++.h>
#define ll long long
using namespace std; 
ll n,m,x,y,z,s,t,id,val,to,dis[100005];
bool vis[100005];
struct node{
    ll id,val;
};
struct nodee{
    ll dis,to;
    bool operator<(const nodee &a) const
      {
        return dis>a.dis;
      }
};
vector<node> a[100005];
priority_queue<nodee> q;
nodee p;
int main()
{
    scanf("%lld%lld%lld",&n,&m,&s);
    for(int i=1;i<=m;i++)
      {
        scanf("%lld%lld%lld",&x,&y,&z);
        a[x].push_back(node{y,z});
        a[y].push_back(node{x,z});
      }
    memset(dis,1,sizeof dis);
    dis[s]=0;
    q.push(nodee{0,s});
    while(!q.empty())
      {
        p=q.top(); q.pop();
        if(vis[p.to]) continue;
        vis[p.to]=true;
        to=p.to;
        for(int j=0;j<a[to].size();j++)
          {
            id=a[to][j].id;
            val=a[to][j].val;
            if(!vis[id]&&dis[to]+val<dis[id])
              {
                dis[id]=dis[to]+val;
                q.push(nodee{dis[id],id});
              }
          }
      }
    for(int i=1;i<=n;i++)
      printf("%lld ",dis[i]);
    return 0;
}
2022/7/18 09:38
加载中...