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]));
            }
        }
    }
}

  

转载于:https://www.cnblogs.com/imzscilovecode/p/8448119.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值