堆优化Prim 最小生成树 模板
2024-10-20 20:42:51
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5005;
const int MAXM = 200005;
int n, m, fir[MAXN], to[MAXM*2], nxt[MAXM*2], w[MAXM*2], cnt, dis[MAXN];
bool vis[MAXN];
#define pii pair<int,int>
#define mp make_pair
priority_queue<pii, vector<pii>, greater<pii> >q;
int MST = 0;
inline void Prim()
{
int tot = 0;
memset(dis, 0x3f, sizeof dis);
q.push(mp(dis[1]=0, 1));
while(!q.empty())
{
int u = q.top().second; q.pop();
if(vis[u]) continue;
vis[u] = 1; MST += dis[u]; tot++;
for(int i = fir[u]; i; i = nxt[i])
if(!vis[to[i]] && w[i] < dis[to[i]])
q.push(mp(dis[to[i]]=w[i], to[i]));
}
if(tot < n) MST = -1;
}
inline void Add(int u, int v, int wt)
{
to[++cnt] = v; nxt[cnt] = fir[u]; fir[u] = cnt; w[cnt] = wt;
}
int main ()
{
int x, y, z;
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; i++)
scanf("%d%d%d", &x, &y, &z), Add(x, y, z), Add(y, x, z);
Prim();
if(~MST) printf("%d\n", MST);
else puts("orz");
}
最新文章
- python之import子目录文件
- oracle 日期获取
- 利用VS编译libiconv库
- 如何使用同一个Action中的不同方法
- 轻松学习Linux之内核编译
- Python Socket,How to Create Socket Cilent? - 网络编程实例
- YII CRUD 例子
- jquery html 动态添加元素绑定事件
- Android SDK更新缓慢或无法更新的解决方法
- .Net 5分钟搞定网页实时监控
- doT.js——前端javascript模板引擎问题备忘录
- 小程序 表单 获取 formId
- CTF杂项之音频隐写
- Ubuntu 14.04 升级 nginx/1.8.1
- windows7 java环境配置
- Pandas 基础(9) - 组合方法 merge
- Ember.js 1.0 RC6 发布,JavaScript 框架
- ZOJ 3211dream city dp(效率优化)
- 开源单点登录系统CAS入门
- 简单的js定时器