求调prim
  • 板块学术版
  • 楼主LogicVortex
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/28 11:07
  • 上次更新2024/9/28 13:19:30
查看原帖
求调prim
750444
LogicVortex楼主2024/9/28 11:07
#include<bits/stdc++.h>
using namespace std;
int n, m, cnt = 1, ans;
struct node {
	int to, nxt, w;
} edge[20005];

int head[1005];
int dis[1005];
void addedge(int u, int v, int w) {
	edge[u].to = v;
	edge[u].w = w;
	edge[u].nxt = head[u];
	head[u] = cnt++;
}

int vis[1005];
int prim() {
	dis[1] = 0;
	int stp = n;

	while (stp--) {
		int mi = 0x3f3f, id = -1;

		for (int i = 1; i <= n; i++) 
			if (!vis[i] && dis[i] < mi)
				mi = dis[i], id = i;

		if (id == -1)
			return -1;

		ans += mi;
		vis[id] = 1;

		for (int i = head[id]; i != 0; i = edge[i].nxt) 
			if (!vis[edge[i].to] && edge[i].w < dis[i])
				dis[i] = edge[i].w;
	}

	return ans;
}

int main() {
	memset(dis, 0x3f3f, sizeof dis);
	cin >> n >> m;

	for (int i = 1; i <= m; i++) {
		int x, y, z;
		cin >> x >> y >> z;
		addedge(x, y, z);
		addedge(y, x, z);
	}

	cout << prim();
	return 0;
}
2024/9/28 11:07
加载中...