poj 1258 最小生成树 prim+优先队列
来源:互联网 发布:龙之信条女性捏脸数据 编辑:程序博客网 时间:2024/06/09 22:07
想手打个堆优化,搞半天一直WA,悲剧……
#include <iostream>#include <cstring>#include <cstdio>#include <cstdlib>#include <algorithm>#include <vector>#include <queue>using namespace std;#define M 550000#define N 5500#define INF (1<<30)struct Edge{int v,w; Edge(int _v=0,int _w=0){v=_v;w=_w;}}edge[M];int adj[M],head[N],e,ans,n,vis[N],dist[N];bool operator<(const Edge aa,const Edge bb){return aa.w>bb.w;}priority_queue<Edge>q;void prim(){ans=0;int v,w,u;Edge t;memset(vis,0,sizeof(vis));for(int i=1;i<=n;++i)dist[i]=INF;for(int i=head[1];i!=-1;i=adj[i])if(edge[i].w<dist[edge[i].v]){dist[edge[i].v]=edge[i].w;q.push(Edge(edge[i].v,edge[i].w));}int cnt=1;vis[1]=1;while(!q.empty()){t=q.top();q.pop();if(vis[t.v]) continue;ans+=t.w;vis[t.v]=1;cnt++;if(cnt>n) break;for(int i=head[t.v];i!=-1;i=adj[i])if(edge[i].w<dist[edge[i].v]&&!vis[edge[i].v]){dist[edge[i].v]=edge[i].w;q.push(Edge(edge[i].v,edge[i].w));}}}void insert(int u,int v,int w){edge[e].v=v;edge[e].w=w;adj[e]=head[u];head[u]=e++;}int main (){while(scanf("%d",&n)!=EOF){e=0;memset(head,-1,sizeof(head));int t;for(int i=1;i<=n;++i)for(int j=1;j<=n;++j){scanf("%d",&t);if(j>i){insert(i,j,t);insert(j,i,t);}}prim();printf("%d\n",ans);}system("pause");return 0;}
- poj 1258 最小生成树 prim+优先队列
- 最小生成树模板(Prim+优先队列)
- 5253 连接的管道【最小生成树prim+优先队列】
- 最小生成树之Prim算法 优先队列版本
- 最小生成树之prim算法(优先队列优化)
- 最小优先队列+prim
- POJ 1258 : 最小生成树(Prim)
- poj 1258 prim最小生成树
- POJ-1258 最小生成树 prim算法
- poj 1258 prim最小生成树
- POJ 1258 Prim最小生成树
- poj 1258 最小生成树 prim
- POJ 1258 -- 最小生成树(prim算法)
- poj 1258 最小生成树Prim
- 图基本算法 最小生成树 Prim算法(邻接表/邻接矩阵+优先队列STL)
- HDU1102 - Constructing Roads 用优先队列优化Prim最小生成树
- hdu 1233 还是畅通工程 (最小生成树,prim,优先队列,kruskal并查集)
- POJ 1251 优先队列 Prim
- VCL 窗口函数注册机制研究手记,兼与 MFC 比较(转)
- spring自动扫描java类(context:component-scan)
- RRDtool
- union共用体
- 博文共赏:也谈大公司病2——减少错误不等于增加成功
- poj 1258 最小生成树 prim+优先队列
- 合并排序算法
- 实现DIV层内的文字垂直居中
- java学习
- 双系统,开机自动进入grub,解决方案
- android语音识别 android.speech 包分析
- Marshal类支持从托管内存空间复制数据到非托管内存空间
- 红尘依梦
- 各种排序算法优点缺点