堆优化版dijkstra

#include<bits/stdc++.h>
using namespace std;
const int N = 1e4+5;
struct node{
    int val,num;
    node(int newval,int newnum){val=newval;num=newnum;}
    bool operator<(const node &a) const{
      return val<a.val;
    }
};
vector<pair<int,int> > vec[N];
priority_queue<node> qu;
int dis[N];
int n,m,s;
void dij()
{
    dis[s]=0;
    qu.push(node(0,s));
    while(qu.size())
    {
        int front=qu.top().num;
        qu.pop();
        for(int i=0;i<vec[front].size();i++)
        {
            int to=vec[front][i].first,va=vec[front][i].second;
            if(dis[to]>dis[front]+va)
            {
                dis[to]=dis[front]+va;
                qu.push((node){dis[to],to});
            }
        }
    }
}
int main()
{
    int a,b,c;
    cin>>n>>m>>s;
    memset(dis,0x3f,sizeof(dis));
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        vec[a].push_back(make_pair(b,c));
    }
    for(int i=1;i<=n;i++)
        cout<<dis[i]<<endl;
    return 0;
}

  

posted @ 2019-10-11 21:54  麦客_zeng  阅读(101)  评论(0)    收藏  举报