社区讨论

求调堆优化prim

P3366【模板】最小生成树参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo2uhgvu
此快照首次捕获于
2023/10/23 19:59
2 年前
此快照最后确认于
2023/10/23 19:59
2 年前
查看原帖
RT,调了半天了,救救孩子吧qwq
CPP
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
int n, m;
struct node
{
	int v, w;
	friend bool operator<(node x, node y)
	{
		return x.w < y.w;
	}
};
vector<node> gr[maxn];
priority_queue<node> q;
int dis[maxn];
bool vis[maxn];
int main()
{
	cin >> n >> m;
	for (int i = 1; i <= m; i++)
	{
		int u, v, w;
		cin >> u >> v >> w;
		gr[u].push_back(node{v, w});
		gr[v].push_back(node{u, w});
	}
	int ans = 0, tot = 0;
	memset(dis, 0x3f, sizeof(dis));
	dis[1] = 0;
	q.push(node{1, 0});
	while (!q.empty() && tot < n)
	{
		node now = q.top();
		q.pop();
		int u = now.v, d = now.w;
		if (vis[u])
			continue;
		vis[u] = 1;
		ans += d;
		tot++;
		for (node to : gr[u])
		{
			int v = to.v, w = to.w;
			if (!vis[v] && dis[v] > w)
			{
				dis[v] = w;
				q.push(node{v, dis[v]});
			}
		}
	}
	if (tot == n)
		cout << ans << endl;
	else
		cout << "orz" << endl;
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...