prim优先级队列优化
Posted lmjer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; }
以上是关于prim优先级队列优化的主要内容,如果未能解决你的问题,请参考以下文章