玄关,优先队列优化prim
查看原帖
玄关,优先队列优化prim
629377
iamajcer楼主2024/10/25 21:38

只A了后3个点,rt。

#include <bits/stdc++.h>
using namespace std;
const int N=5005;

struct node
{
	int v, w;
	bool operator <(const node &A) const
	{
		return w<A.w;
	};
};
vector<node> a[N]; 
priority_queue<node> q;
int n, m, u1, v1, w1, dis[N], vis[N], ans=0;
bool prim()
{
	int cnt=0;
	
	memset(dis, 63, sizeof dis);
	memset(vis, 0, sizeof vis);
	
	dis[1]=0;
	q.push({1, 0});
	
	while (!q.empty())
	{
		int u=q.top().v;
		q.pop();
		
		if (vis[u]) continue;
		cnt++, ans+=dis[u], vis[u]=1;
		
		for (int j=0; j<a[u].size(); j++)
		{
			int v=a[u][j].v, w=a[u][j].w;
			if (!vis[v] && dis[v]>w) dis[v]=w, q.push({v, w});
		}
	}
	
	if (cnt!=n) return 0;
	return 1;
}
int main()
{
	scanf("%d%d", &n, &m);
	for (int i=1; i<=m; i++)
	{
		scanf("%d%d%d", &u1, &v1, &w1);
		a[u1].push_back({v1, w1});
		a[v1].push_back({u1, w1});
	}
	
	if (prim()) printf("%d", ans);
	else printf("orz");
	
	return 0;
}
2024/10/25 21:38
加载中...