zoukankan      html  css  js  c++  java
  • 【最小生成树】Jungle Roads POJ

    Jungle Roads POJ - 1251

    题意:

    给定若干条村庄之间的道路及其维护费用,问可以保证各村庄之间连通的最低维护费用。

    思路:

    直接套最小生成树的板子。

    int fa[maxn];
    int r[maxn];
    int x[maxn], y[maxn], w[maxn];
    int num;
    
    int find(int x) { return fa[x] == x ? x : fa[x] = find(fa[x]); }
    bool cmp(int i, int j) { return w[i] < w[j]; };
    char alpha[] = { "0ABCDEFGHIJKLMNOPQRSTUVWXYZ" };
    
    int solve() {
        int ans = 0;
        for (int i = 0; i < maxn; i++) fa[i] = i;
        for (int i = 0; i < num; i++) r[i] = i;
        sort(r, r + num, cmp);
        for (int i = 0; i < num; i++) {
            int e = r[i];
            int u = find(x[e]);
            int v = find(y[e]);
            if (u != v) {
                ans += w[e];
                fa[u] = v;
            }
        }
        return ans;
    }
    
    int main()
    {
        //ios::sync_with_stdio(false);
        int n;
        map<char, int> mp;
        for (int i = 1; i <= 26; i++) mp[alpha[i]] = i;
        while (cin >> n && n) {
            num = 0;
            for (int i = 1; i <= n - 1; i++) {
                char ch1, ch2; int k,weight; cin >> ch1 >> k;
                while (k--) {
                    x[num] = mp[ch1];
                    cin >> ch2 >> weight;
                    y[num] = mp[ch2];
                    w[num] = weight;
                    num++;
                }
            }
            cout << solve() << endl;
        }
        return 0;
    }
    
  • 相关阅读:
    JAVA日报
    JAVA日报
    JAVA日报
    论文爬取(四)
    论文爬取(三)
    论文爬取(二)
    剑指 Offer 59
    剑指 Offer 58
    剑指 Offer 58
    剑指 Offer 57
  • 原文地址:https://www.cnblogs.com/streamazure/p/13499764.html
Copyright © 2011-2022 走看看