玄关,不知道拿错了
查看原帖
玄关,不知道拿错了
766880
jingliang_youxi楼主2024/10/14 18:47
#include <bits/stdc++.h>
using namespace std;

struct node {
	int v, w;
};
int n, m;
vector<node>e[5005];
int dis[5005], book[5005]

int p() {
	priority_queue<pair<int, int>>q;
	q.push({0, 1});
	memset(dis, 0x3f, sizeof(dis));
	dis[1] = 0;
	int res = 0;
	for (int i = 1; i <= n; i++) {
		q.push({-dis[i], i});
	}
	int cnt = 0;
	while (!q.empty()) {
		int tmp = q.top().second;
		int D = -q.top().first;
		q.pop();
		if (book[tmp] || D == 0x3f3f3f3f)
			continue;
		book[tmp] = 1;
		res += dis[tmp];
		cnt++;
		for (int i = 0; i < e[tmp].size(); i++) {
			int v = e[tmp][i].v;
			int w = e[tmp][i].w;
			if (dis[v] > w) {
				dis[v] = w;
				q.push({-dis[v], v});
			}
		}
	}
	if (cnt == n)
		return res;
	else
		return -1;
}

int main() {
	cin >> n >> m;
	for (int i = 1; i <= m; i++) {
		int x, y, z;
		cin >> x >> y >> z;
		e[x].push_back({y, z});
	}
	int res = p();
	if (res == -1) {
		cout << "orz" << endl;
	} else {
		cout << res << endl;
	}
	return 0;
}

2024/10/14 18:47
加载中...