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

最小生成树 prime+heap

时间:2017-01-30 14:47:32      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:i++   sed   turn   min   pair   use   数组   second   ber   

改一个错误真不容易,刚开始没有加上used数组,没有判断每个顶点是否已经加入到数组当中,结果同一个顶点被pop不止一次。

struct edge{int to,cost;};
typedef pair<int,int> P;//first集合X到i的最短距离,second点的编号
int ranchNumber,roadNumber;//顶点个数,道路个数
int mincost[10005];//每个顶点到集合x的最短距离
bool used[10005];//每个顶点是否已经加入到集合中
vector<edge> g[100005];
//顶点编号从0开始;
int heapPrime(){
    priority_queue<P,vector<P>,greater<P> > que;
    fill(mincost,mincost+10005,INF);
    fill(used,used+10005,false);
    mincost[0]=0;
    int ans=0;
    que.push(P(mincost[0],0));
    for(int j=0;j<ranchNumber;j++){
        P p=que.top();
        while(used[p.second]==true){
            que.pop();
            p=que.top();
        }
        que.pop();
        used[p.second]=true;
        ans+=p.first;
        int e=p.second;
        for(int i=0;i<g[e].size();i++){
            edge ee=g[e][i];
            if(mincost[ee.to]>ee.cost){
                mincost[ee.to]=ee.cost;
                que.push(P(mincost[ee.to],ee.to));
            }
        }
    }
    return ans;
}

 

最小生成树 prime+heap

标签:i++   sed   turn   min   pair   use   数组   second   ber   

原文地址:http://www.cnblogs.com/TWS-YIFEI/p/6358076.html

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