prim优先级队列优化

#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;
}

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

时间: 2024-10-24 01:59:33

prim优先级队列优化的相关文章

优先级队列优化的霍夫曼编码(带中文压缩)

利用STL中的优先级队列进行优化 我将压缩和解压分为两部分,其实一些还是是一样的 压缩的时候通过bitset将每8个01串压缩成一个字节,如果最后一个不满足8个,用0补齐,但是要记录最后一个字节实际有多少个有效位,将其存入文件最后一个字节,解压的时候先将文件定位到最后一个字节,取出有效位的个数,压缩文件真正有效的是倒数第二个字节,倒数第一个字节只是记录倒数第二个字节中有几位是有效的,解压的时候根据密码本(记录每个字节的权值)建立哈夫曼树,然后更具哈夫曼树解压文件 压缩代码部分: #include

poj 3013 Big Christmas Tree (dij+优先级队列优化 求最短)

模板 意甲冠军:给你一个图,1始终根,每一方都有单价值,每个点都有权重新. 每个边缘的价格值 = sum(后继结点重)*单价方值. 最低价格要求树值,它构成了一棵树n-1条边的最小价值. 算法: 1.由于每一个边的价值都要乘以后来訪问的节点的权重.而走到后来訪问的点必经过这条边. 实际上总价值就是  到每一个点的最短路径*这个点的权重. 2.可是这个题 数据量真的太大了.50000个点,50000条边. 写普通的dij算法tle. 必须加优先队列优化- - 据说spfa也能过.可是spfa算法不

POJ 3013 Big Christmas Tree(最短Dijkstra+优先级队列优化,SPFA)

POJ 3013 Big Christmas Tree(最短路Dijkstra+优先队列优化,SPFA) ACM 题目地址:POJ 3013 题意: 圣诞树是由n个节点和e个边构成的,点编号1-n.树根为编号1,选择一些边.使得全部节点构成一棵树.选择边的代价是(子孙的点的重量)×(这条边的价值). 求代价最小多少. 分析: 单看每一个点被计算过的代价,非常明显就是从根到节点的边的价值.所以这是个简单的单源最短路问题. 只是坑点还是非常多的. 点的数量高达5w个,用矩阵存不行.仅仅能用边存. 还

优先级队列与堆排序

转自:http://www.cnblogs.com/yangecnu/p/Introduce-Priority-Queue-And-Heap-Sort.html 在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象.最简单的一个例子就是,在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话. 在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象.这种数据结构就是优先级队列(Pri

第十章笔记&#183;优先级队列

需求与动机 什么是优先级队列 优先队列是计算机科学中的一类抽象数据类型.优先队列中的每个元素都有各自的优先级,优先级最高的元素最先得到服务:优先级相同的元素按照其在优先队列中的顺序得到服务.优先队列往往用堆来实现. --wikipedia 应用需求 在医院门诊,如果只有一个医生,多位病人.按照通常流程来说,采用先到先服务的顺序(FIFO).但是如果病人中有人患有心脏病,那么显然这个病人需要得到优先治疗. 在计算机系统中,绝大多数支持多任务,这种多任务调度也类似于医院门诊.CPU相当于医生,计算任

ACM/ICPC 之 优先级队列+设置IO缓存区(TSH OJ-Schedule(任务调度))

一个裸的优先级队列(最大堆)题,但也有其他普通队列的做法.这道题我做了两天,结果发现是输入输出太过频繁,一直只能A掉55%的数据,其他都是TLE,如果将输入输出的数据放入缓存区,然后满区输出,可以将IO时间消耗降到很低. 任务调度(Schedule) 描述 某高性能计算集群(HPC cluster)采用的任务调度器与众不同.为简化起见,假定该集群不支持多任务同时执行,故同一时刻只有单个任务处于执行状态.初始状态下,每个任务都由称作优先级数的一个整数指定优先级,该数值越小优先级越高:若优先级数相等

ZOJ 3632 Watermelon Full of Water(dp+线段树或单调队列优化)

Watermelon Full of Water Time Limit: 3 Seconds      Memory Limit: 65536 KB Watermelon is very popular in the hot summer. Students in ZJU-ICPC Team also love watermelon very much and they hope that they can have watermelon to eat every day during the

浅谈算法和数据结构: 五 优先级队列与堆排序

转载自:http://www.cnblogs.com/yangecnu/p/Introduce-Priority-Queue-And-Heap-Sort.html 浅谈算法和数据结构: 五 优先级队列与堆排序 在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象.最简单的一个例子就是,在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话. 在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是

什么是优先级队列(priority queue)?

有时候我们需要在某个元素集合中找到最小值和最大值 .优先级队列抽象数据(Priority Queue ADT)模型是我们能够使用的方法之一,这是一种支持插入和删除最小值(DeleteMin)或者最大值(DeleteMax)的数据结构. 这两个操作和队列中的进队(EnQueue)和出队(DeQueue)操作很相似.区别就在于,在优先级队列中,数据进入的顺序与他们接受处理的顺序可能不同.就像工作日程,一般是按重要程度排序而不是到来顺序. 在优先级队列中,如果最小的元素总是优先级最高(即最小元素先出列