题解 | 还是畅通工程

还是畅通工程

https://www.nowcoder.com/practice/d6bd75dbb36e410995f8673a6a2e2229

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
struct myType {
    int v1c;
    int v2c;
    int milec;
};
bool compare(myType lhs, myType rhs) {
    if (lhs.milec < rhs.milec) {
        return true;
    }
    else {
        return false;
    }
}
int father[100];
void InitT(int n) {
    for (int i = 0; i <= n; ++i) {
        father[i] = i;
    }
}
int FindT(int u) {
    if (u == father[u]) { return u; }
    else {
        father[u] = FindT(father[u]);
        return father[u];
    }
}
void UnionT(int u, int v) {
    int uroot = FindT(u);
    int vroot = FindT(v);
    father[vroot] = uroot;
}
int main() {
    int n;
    int v1, v2, mile;
    while (scanf("%d", &n) != EOF) {
        if (n == 0) { break; }
        InitT(n);
        int vertex = 0;
        int minmile = 0;
        vector<myType> my(n * (n - 1) / 2);
        for (int i = 0; i < n * (n - 1) / 2; ++i) {
            scanf("%d%d%d", &v1, &v2, &mile);
            my[i].v1c = v1;
            my[i].v2c = v2;
            my[i].milec = mile;
        }
        sort(my.begin(), my.end(), compare);
        for (int j = 0; j < n * (n - 1) / 2; ++j) {
            if (vertex == n - 1) { break; }
            if (FindT(my[j].v1c) != FindT(my[j].v2c)) {
                UnionT(my[j].v1c, my[j].v2c);
                ++vertex;
                minmile = minmile + my[j].milec;
            }
        }
        if (minmile != 0) { printf("%d\n", minmile); }

    }
    return 0;
}

#shit#
全部评论

相关推荐

04-05 21:13
邯郸学院 Java
点赞 评论 收藏
分享
庸也君:简历粗略看,有可能会被paas,如果详细地看的话,简历写的很优秀,很规范,部分内容也有量化
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务