prim+heap模板
来源:互联网 发布:nginx和apache是什么 编辑:程序博客网 时间:2024/06/10 11:00
先扔在这里,还没具体搞懂
#include<bits/stdc++.h>#define MAXN 1200#define MAXM 120000#define INF 19930317int e[MAXM], cost[MAXM], next[MAXM], g[MAXN], size;struct node{ int d, v;}heap[MAXN];int pos[MAXN], hl;int m, n;void swap(int a, int b){ heap[0] = heap[a]; heap[a] = heap[b]; heap[b] = heap[0]; pos[heap[a].v] = a; pos[heap[b].v] = b;}void heapfy(){ int i = 2; while (i <= hl) { if ((i < hl) && (heap[i + 1].d < heap[i].d)) i++; if (heap[i].d < heap[i >> 1].d) { swap(i, i >> 1); i <<= 1; } else break; }}void decrease(int i){ heap[0] = heap[i]; while ((i > 1) && (heap[0].d < heap[i >> 1].d)) { heap[i] = heap[i >> 1]; pos[heap[i].v] = i; i >>= 1; } heap[i] = heap[0]; pos[heap[i].v] = i;}void delete_min(){ swap(1, hl); hl--; heapfy();}void relax(int v, int w){ if (w < heap[pos[v]].d) { heap[pos[v]].d = w; decrease(pos[v]); }}void insert(int u, int v, int w){ e[++size] = v; cost[size] = w; next[size] = g[u]; g[u] = size;}void init(){ int i, u, v, w; size = 0; memset(g, 0, sizeof(g)); for (i = 1; i <= m; i++) { scanf("%d%d%d", &u, &v, &w); insert(u, v, w); insert(v, u, w); }}int prim(){ int mst = 0, u , p, i; for (i = 1; i <= n; i++) { pos[i] = heap[i].v = i; heap[i].d = INF; } heap[1].d = 0; hl = n; while (hl) { u = heap[1].v; mst += heap[1].d; delete_min(); for (p = g[u]; p; p = next[p]) if (pos[e[p]] <= hl) relax(e[p], cost[p]); } return mst;}int main(){ while (scanf("%d%d", &n, &m) == 2 && n) { init(); printf("%d\n", prim()); }}
0 0
- prim+heap模板
- 【模板】最小生成树Prim 4heap
- heap+prim
- POJ2349 prim+heap
- prim模板
- Prim 模板
- 模板-prim
- prim模板
- Prim模板
- Prim 模板
- Prim模板
- 模板:Prim
- Prim、Kruskal、Prim+Heap算法效率实测
- Prim、Kruskal、Prim+Heap算法效率实测
- Prim、Prim+Heap、Kruskal效率比较
- Prim、Kruskal、Prim+Heap算法效率实测
- Prim 模板 hdu 1879
- Kru&&Prim模板
- http 压缩 分块传输
- C++中函数返回临时对象和本地对象的区别
- 《0Day》之通过覆盖虚表指针来突破GS
- 264解码多线程项目总结
- 回调函数的作用
- prim+heap模板
- 服务器Apache的安装
- xcode错误信息汇总
- POJ 2559 Largest Rectangle in a Histogram --维护单调栈
- 使用Druid监控SQL执行状态
- 关于各种进制之间互相转化(以十进制为桥梁)
- JS扑克牌特效
- spring引用配置文件的时候classpath:和classpath*:的区别
- Git基本用法