码迷,mamicode.com
首页 > 其他好文 > 详细

prim优先级队列优化

时间:2018-07-30 21:38:06      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:pop   using   can   rhs   col   names   color   优先级   span   

#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;

struct my{
       int next;
       int v;
       int w;
};

struct lmjer{
       int x,w;
       bool operator<(const lmjer &rhs)const{
            return w>rhs.w;
       }
};

const int nil=0x7f7f7f7f;
const int maxn=200000+10;
const int maxm=2000000+10;

priority_queue<lmjer>Q;

int adj[maxn],fa,n,m,dist[maxn];
my bian[maxm];
bool vis[maxn];

void myinsert(int u,int v,int w){
     bian[++fa].v=v;
     bian[fa].next=adj[u];
     adj[u]=fa;
     bian[fa].w=w;
}

void prim(){
    int cost=0;
    lmjer u;
    u.x=1;
    u.w=0;
    Q.push(u);
    int tt=0;
    while(!Q.empty()&&tt<n){
        lmjer x=Q.top();
        Q.pop();
        if(vis[x.x]) continue;
        vis[x.x]=true;
        tt++;
        cost+=x.w;
        for(int i=adj[x.x];i;i=bian[i].next){
            int v=bian[i].v;
            if(!vis[v]){
                lmjer tmp;
                tmp.x=v;
                tmp.w=bian[i].w;
                Q.push(tmp);
            }
        }
    }
    printf("%d",cost);
}

int main(){
    int u,v,w;
    scanf("%d%d",&n,&m);
    for (int i=1;i<=m;i++){
        scanf("%d%d%d",&u,&v,&w);
        myinsert(u,v,w);
        myinsert(v,u,w);
    }
    prim();
return 0;
}

 

prim优先级队列优化

标签:pop   using   can   rhs   col   names   color   优先级   span   

原文地址:https://www.cnblogs.com/lmjer/p/9392444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!