zoukankan      html  css  js  c++  java
  • E

    题意:在一个叫做QS的星系,他们使用一些特殊的通讯方式,两个人之间通讯需要使用一个网络适配器,但是一个网络适配器只能跟一个人联系,所有它连接几个人就需要及格适配器,而且每个人都有一些不同的偏好,喜欢的适配器的牌子也是不同的,现在让你求出来让QS人之间相互通讯最少需要多少代价?
    输入第一行是测试数据组数,下面是一个N,代表N个人,下一样有N个数表示每个人喜欢的适配器的价格,接着一个矩阵,表示两点间通讯(电缆??)的价格。

    分析:只要在每条边的权值上加上两个适配器的价格就可以了。
    *******************************************************************
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<queue>
    #include<math.h>
    #include<vector>
    using namespace std;

    #define maxn 1005

    int f[maxn], val[maxn];
    struct node
    {
        int u, v, len;
        friend bool operator < (node a, node b)
        {
            return a.len > b.len;
        }
    };
    int Find(int x)
    {
        if(f[x] != x)
            f[x] = Find(f[x]);
        return f[x];
    }

    int main()
    {
        int T;

        scanf("%d", &T);

        while(T--)
        {
            int N, u, v;
            node s;
            priority_queue<node> Q;

            scanf("%d", &N);

            for(int i=1; i<=N; i++)
            {
                scanf("%d", &val[i]);
                f[i] = i;
            }

            for(s.u=1; s.u<=N; s.u++)
            for(s.v=1; s.v<=N; s.v++)
            {
                scanf("%d", &s.len);
                s.len += val[s.u]+val[s.v];
                Q.push(s);
            }

            int ans = 0;

            while(Q.size())
            {
                s = Q.top();Q.pop();
                u = Find(s.u), v = Find(s.v);

                if(u != v)
                {
                    f[u] = v;
                    ans += s.len;
                }
            }

            printf("%d ", ans);
        }

        return 0;
    }
  • 相关阅读:
    solr的学习
    springMvc学习地址新
    mybatis教程
    spring学习地址
    spring思想分析
    java中反射讲解及实例
    学习地址
    linux常用命令
    XML Data Type Methods(一)
    Ruby中 使用Builder Xml Markup 操作XML
  • 原文地址:https://www.cnblogs.com/liuxin13/p/4674490.html
Copyright © 2011-2022 走看看