社区讨论
求调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 条回复,欢迎继续交流。
正在加载回复...