我已 hack 样例
查看原帖
我已 hack 样例
766154
God_Demon楼主2024/3/18 21:39

强烈建议把样例加入测试数据

本蒟蒻样例没过,但测试点全 ACAC 了,不知道是什么原因,求大佬帮助,下面是我的代码。

#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;
}
2024/3/18 21:39
加载中...