hihocoder 第二十九周 堆优化的Prim算法
2015-02-13 00:16
197 查看
又深刻理解了一遍prim和dijkstra算法,感觉蛮棒的~
第一次自己用邻接表写,just soso~ 啊哈~
一开始被优先队列,重载运算符给卡住了~ 蛋疼~
第一次自己用邻接表写,just soso~ 啊哈~
一开始被优先队列,重载运算符给卡住了~ 蛋疼~
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<queue> #include<algorithm> #include<map> #include<iomanip> #include<climits> #include<string.h> #include<stdlib.h> #include<vector> #define INF 1e7 #define MAXN 111111 using namespace std; struct node{ int v, w; bool operator < (const node& a) const { return w > a.w; } }; vector<node> G[MAXN]; bool vis[MAXN]; int dis[MAXN]; int n, m; priority_queue<node> q; void Prim(node s) { memset(vis, 0, sizeof(vis)); for (int i = 0; i <= n; ++i) dis[i] = INF; while (!q.empty()) q.pop(); int ans = 0; q.push(s); while (!q.empty()) { node u = q.top(); q.pop(); if (vis[u.v]) continue; vis[u.v] = true; ans += u.w; //cout << ans << endl; for (int i = 0; i < G[u.v].size(); ++i) { int v = G[u.v][i].v; if (!vis[v] && dis[v] > G[u.v][i].w) { dis[v] = G[u.v][i].w; q.push({ v, dis[v] }); } } } cout << ans << endl; } int main() { int a, b, c; cin >> n >> m; for (int i = 1; i <= m; ++i) { cin >> a >> b >> c; G[a].push_back({ b, c }); G[b].push_back({ a, c }); } Prim({ 1, 0 }); //system("pause"); return 0; }
相关文章推荐
- hihoCoder_#1109_堆优化的Prim算法
- hihocoder(1109) 堆优化的Prim算法
- hihocoder 1109 : 最小生成树三·堆优化的Prim算法
- hiho一下 第二十九周 最小生成树三·堆优化的Prim算法【14年寒假弄了好长时间没搞懂的prim优化:prim算法+堆优化 】
- hihoCoder 1109 最小生成树三·堆优化的Prim算法
- hihocoder1097、1109最小生成树(prim算法+堆优化)
- prim算法 优化前O(n²) 优化后O(n-k)
- hihocoder 最小生成树一·Prim算法
- hihocoder1475 数组分拆【DP+前缀和优化】
- hihoCoder - hiho一下 第二十六周 - A - 最小生成树一·Prim算法
- hihoCoder--1469 优化延迟(二分+优先队列)
- 最小生成树Prim算法 堆优化
- hiho刷题日记——第二十九天最小生成树三·堆优化的Prim算法
- hdu1233 还是畅通工程 最小生成树 Prim算法堆优化
- HIHO #1109 : 最小生成树三·堆优化的Prim算法
- HihoCoder 1097 Prim算法
- hiho 29 最小生成树三·堆优化的Prim算法
- HihoCoder - 1364 奖券兑换 (01背包转多重背包 二进制优化)@
- Hihocoder 之 #1097 : 最小生成树一·Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)
- 优先队列优化prim算法