本蒟蒻样例没过,但测试点全 AC 了,不知道是什么原因,求大佬帮助,下面是我的代码。
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair <int, int> pii;
const int maxn = 5e4 + 5;
struct node {
int u, v, w1, w2, id, lv;
} e[maxn];
int n, k, m, fa[maxn], ans;
vector <node> v;
int find(int x) {
return fa[x] == x ? x : fa[x] = find(fa[x]);
}
inline bool cmpw1(node a, node b) {
return a.w1 < b.w1;
}
inline bool cmpw2(node a, node b) {
return a.w2 < b.w2;
}
inline bool cmpid(node a, node b) {
return a.id < b.id;
}
int main() {
scanf("%d%d%d", &n, &k, &m);
for (int i = 1; i <= n; ++i) fa[i] = i;
for (int i = 1; i < m; ++i)
scanf("%d%d%d%d", &e[i].u, &e[i].v, &e[i].w1, &e[i].w2), e[i].id = i;
sort(e + 1, e + m, cmpw1);
for (int i = 1; i < m && k; ++i) if (find(e[i].u) != find(e[i].v)) {
fa[find(e[i].u)] = find(e[i].v);
ans = max(ans, e[i].w1);
--k, e[i].lv = 1;
v.push_back(e[i]);
}
sort(e + 1, e + m, cmpw2);
for (int i = 1; i < m; ++i) if (find(e[i].u) != find(e[i].v)) {
fa[find(e[i].u)] = find(e[i].v);
ans = max(ans, e[i].w2);
e[i].lv = 2;
v.push_back(e[i]);
}
printf("%d\n", ans);
sort(v.begin(), v.end(), cmpid);
for (int i = 0; i < v.size(); ++i) printf("%d %d\n", v[i].id, v[i].lv);
return 0;
}