求助,找了好久也不知道哪错了,也没用测试集
#include <bits/stdc++.h>
using namespace std;
struct A {
int next, to, w1, w2, num;
} p[20010];
struct B {
int p, t;
} q[10010];
int book[10010];
int minn;
int fa[10010];
int n, m, k;
int tmp = 1;
bool cmp1(A a, A b) {
return a.w1 < b.w1;
}
bool cmp2(A a, A b) {
return a.w2 < b.w2;
}
bool cmp3(B a, B b) {
return a.t < b.t;
}
int find(int x) {
if (fa[x] == x)
return x;
else {
fa[x] = find(fa[x]);
return fa[x];
}
}
void kruskal1() {
int step = 0;
for (int i = 1; i < m; i++) {
if (!book[p[i].num]) {
if (find(p[i].next) != find(p[i].to)) {
fa[find(p[i].next)] = fa[find(p[i].to)];
q[tmp].t = p[i].num;
q[tmp].p = 1;
step++;
tmp++;
minn = max(minn, p[i].w1);
book[p[i].num] = 1;
}
}
if (step == k)
return;
}
}
void kruskal2() {
int step = 0;
for (int i = 1; i < m; i++) {
if (!book[p[i].num]) {
if (find(p[i].next) != find(p[i].to)) {
fa[find(p[i].next)] = fa[find(p[i].to)];
book[p[i].num] = 1;
q[tmp].t = p[i].num;
q[tmp].p = 2;
step++;
tmp++;
minn = max(minn, p[i].w2);
}
}
if (step == n - 1 - k)
return;
}
}
int main () {
cin >> n >> k >> m;
for (int i = 1; i < m; i++) {
cin >> p[i].next >> p[i].to >> p[i].w1 >> p[i].w2;
p[i].num = i;
}
memset(book, 0, sizeof(book));
for (int i = 1; i <= n; i++) {
fa[i] = i;
}
sort(p + 1, p + m, cmp1);
kruskal1();
sort(p + 1, p + m, cmp2);
kruskal2();
sort(q + 1, q + n, cmp3);
cout << minn << endl;
for (int i = 1; i < n; i++) {
cout << q[i].t << " " << q[i].p << endl;
}
}```