• A


    想必看这道题的时候直接看数据还有那个图就能明白什么意思吧,说的已经很清楚了,每个点都有一些相连的点和权值,求出来如果连接所有点,最小的权值是多少,赤裸裸的最小生成树。。。
    ************************************************************************************
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<queue>
    #include<vector>
    using namespace std;

    #define maxn 30

    struct node
    {
        int v, len;
        node(int v, int len):v(v),len(len){}
        friend bool operator < (node a, node b){
            return a.len > b.len;
        }
    };
    vector<node> G[maxn];

    int prim(int s)
    {
        int i, ans=0, use[maxn]={0}, M;
        priority_queue<node> Q;
        use[s] = 1;

        for(i=0, M=G[s].size(); i<M; i++)
            Q.push(G[s][i]);

        while(Q.size())
        {
            node q = Q.top();Q.pop();

            if(use[q.v] == 0)
            {
                for(i=0, M=G[q.v].size(); i<M; i++)
                    Q.push(G[q.v][i]);
                use[q.v] = 1, ans += q.len;
            }
        }

        for(i=0; i<maxn; i++)
            G[i].clear();

        return ans;
    }

    int main()
    {
        int N;

        while(scanf("%d", &N) != EOF && N)
        {
            int i, u, v, len, M;
            char s[10];

            for(i=1; i<N; i++)
            {
                scanf("%s%d", s, &M);
                u = s[0] - 'A';
                while(M--)
                {
                    scanf("%s%d", s, &len);
                    v = s[0] - 'A';
                    G[u].push_back(node(v, len));
                    G[v].push_back(node(u, len));
                }
            }

            int ans = prim(u);

            printf("%d ", ans);
        }

        return 0;
    }
  • 相关阅读:
    _I、_O、_IO的含义
    ARM启动代码中_main 与用户主程序main()的区别
    ARM汇编程序中的伪指令
    oracle密码过期问题
    等待界面-调转页面前button篇
    等待效果
    winfrom中Application.Restart()
    自动刷新处理
    泛微E8二次开发
    我的菜园子
  • 原文地址:https://www.cnblogs.com/liuxin13/p/4674323.html
Copyright © 2020-2023  润新知