dijkstra模板

题目大意:

最短路模板;

基本思路:

贪心

代码如下:

int dis[maxn];
bool vis[maxn];
vector<int>gra[maxn];
struct Node{
    int u,w;
    Node(int u_,int w_){
        u=u_;w=w_;
    }
    bool operator<(const Node& rhs)const{
        return w>rhs.w;
    }
};
struct Edge{
    int from,to,dist;
    Edge(int u,int v,int d):from(u),to(v),dist(d){}
}edge[maxn];
void dijkstra(int s){
    priority_queue<Node>pq;pq.push(Node(s,0));
    memset(dis,inf,sizeof(dis));dis[s]=0;
    memset(vis,false,sizeof(vis));
    while(!pq.empty()){
        Node tmp=pq.top();
        int u=tmp.u;
        if(vis[u]){
            continue;
        }
        vis[u]=true;
        int sz=gra[u].size();
        for(int i=0;i<sz;i++){
            Edge& e=edge[gra[u][i]];
            if(dis[e.to]>dis[u]+e.dist){
                dis[e.to]=dis[u]+e.dist;
                pq.push(Node(e.to,dis[e.to]));
            }
        }
    }
}

  

posted @ 2018-02-14 11:58  愿~得偿所愿,不负时光  阅读(147)  评论(0编辑  收藏  举报