社区讨论

求调TAT,百思不得其解,90分,第七个点WA,用的Prim

P1195口袋的天空参与者 4已保存回复 4

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@m45qlb9h
此快照首次捕获于
2024/12/01 23:08
去年
此快照最后确认于
2025/11/04 13:28
4 个月前
查看原帖
CPP

#include <bits/stdc++.h>
#define PII pair<int,int>
using namespace std;

vector<PII > edges[50010];//数组下标为起点 终点为first 边权为second
int N, M, X, Y, Z, K, sum = 0;

int Prim(int x) {
	vector<bool> isVisited(N + 1);
	priority_queue<PII, vector<PII >, greater<PII>> heap;//边权 终点
	vector<int> ans;
	heap.push({0, x});
	while (!heap.empty()) {
		PII p = heap.top();
		heap.pop();
		if (!isVisited[p.second]) {
			isVisited[p.second] = true;
			ans.push_back(p.second);
			sum += p.first;
			for (auto item: edges[p.second]) {
				if (!isVisited[item.first])heap.push({item.second, item.first});
			}
		}
		if (ans.size() == N - K + 1)break;
	}
	return sum;
}

int main() {
	cin >> N >> M >> K;
	if (N==K) { cout << 0; return 0;}
	for (int i = 0; i < M; ++i) {
		cin >> X >> Y >> Z;
		edges[X].push_back({Y, Z});
		edges[Y].push_back({X, Z});
	}
	set<int> s;
	for (int i = 1; i <= N; ++i) {
		s.insert(Prim(N));
	}
	for (auto item: s) {
		if (item != 0) {
			cout << item << endl;
			return 0;
		}
	}
}

回复

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

正在加载回复...