APTX博客

  • ACGN
  • Coding
  • DevOps
  • Daily
  • Share
  • Bangumi
APTX Blog
A Moe Blog Set Up By ミズキ
  1. 首页
  2. OI
  3. 正文

C/C++:Prim+堆优化最小生成树模板

2018年9月27日 2697点热度 0人点赞 0条评论

洛谷:P3366 ,和Dijkstra堆优化模板差不多

题目描述

如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz

输入输出格式

输入格式:

第一行包含两个整数N、M,表示该图共有N个结点和M条无向边。(N<=5000,M<=200000)

接下来M行每行包含三个整数Xi、Yi、Zi,表示有一条长度为Zi的无向边连接结点Xi、Yi

输出格式:

输出包含一个数,即最小生成树的各边的长度之和;如果该图不连通则输出orz

输入输出样例

输入样例#1:

4 5
1 2 2
1 3 2
1 4 3
2 3 4
3 4 3

输出样例#1:

7

Prim+堆优化模板

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#define INF 0x3f3f3f3f
using namespace std;

static const int MAXN = 5005;
static const int MAXM = 200005;

struct node {
	int next,to,dis;
};

node e[MAXM << 1];

int head[MAXN],vis[MAXN],dis[MAXN];
int n,m,cnt,num,sum;

inline void add(int from,int to,int dis) {
	e[++cnt].next = head[from];
	e[cnt].to = to;
	e[cnt].dis = dis;
	head[from] = cnt;
}

void Prim_Heap(int s) {
	memset(dis,0x3f,sizeof dis);
	memset(vis,false,sizeof vis);
	priority_queue <pair <int ,int >, vector < pair <int ,int > >, greater < pair <int ,int > > > Q;
	dis[s] = 0;
	Q.push(make_pair(0,s));
	while(!Q.empty()) {
		int u = Q.top().second;
		int d = Q.top().first;
		Q.pop();
		if(vis[u]) continue;
		num++;
		sum += d; 
		vis[u] = true;
		for(int i = head[u];i;i = e[i].next) {
			int v = e[i].to;
			if(dis[v] > e[i].dis) {
				dis[v] = e[i].dis;
				Q.push(make_pair(dis[v],v));
			}
		}
	}
}

int main() {
	cin >> n >> m;
	for(int i = 1;i <= m;++i) {
		int from,to,dis;
		cin >> from >> to >> dis;
		add(from,to,dis);
		add(to,from,dis);
	}
	Prim_Heap(1);
	if(num == n) printf("%d\n",sum);
	else puts("orz");
	return 0;
}

 

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: C++ Dijkstra OI Prim 图论 最小生成树 树 模板 洛谷
最后更新:2018年12月15日

神楽坂 みずき

萌萌萌,好萌!

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

神楽坂 みずき

萌萌萌,好萌!

搜索
最新 热点 随机
最新 热点 随机
上岸 Star Divine 现代前端工程师发展方向不完全指北 站点域名变更通知 私たちの居る理由 《サクラノ詩》VI 章 直哉与蓝对话
人民邮电出版社社庆:Kindle亚马逊免费领取8本书 C/C++:Tarjan算法求有向图强连通分量 关于P站(Pixiv)的搜索姿势 《サクラノ詩》VI 章 直哉与蓝对话 KikoPlay:开源的全功能弹幕播放器(动漫推荐) #洛谷#C/C++P1082 同余方程 逆元(欧拉函数)/拓展欧几里得
标签聚合
ST 洛谷 动漫 OI 日常 C/C++ C++ HTML
分类
  • ACGN
  • Coding
  • Daily
  • DevOps
  • OI
  • Share

COPYRIGHT © 2017-2022 APTX博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang