求调TAT,百思不得其解,90分,第七个点WA,用的Prim
查看原帖
求调TAT,百思不得其解,90分,第七个点WA,用的Prim
287698
AbaloneOVO楼主2024/12/1 23:08

#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;
		}
	}
}

2024/12/1 23:08
加载中...