首页 > 代码库 > Problem I: 俊爷的局域网

Problem I: 俊爷的局域网

分析:这道题就是要求求出俊爷能赚我多少钱!

然后这道题中,俊爷建设的所有路径都是最短的,然后还要求求出在这些最短路径中路径最大的一个--maxcost!

由于是最短路径了,所以我需要的支付的钱为:maxcost*(n-1);实际所花的钱其实就是将每条路径所花的钱的总和!

然后怎么求出每条路径的花费呢?那么就是使用最小生成树来解决了!在建立最小生成树的时候便可求出最大值maxcost了!

然后剩下的就好办了,直接就是一个减法就ok了!


代码如下:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=5201314;
int p[maxn],cnt,mas;
struct qiu
{
    int f,t,mon;
    bool operator<(const qiu &a)const
    {
        return mon<a.mon;
    }
}road[maxn];
int find(int x)
{
    return p[x]==-1?x:p[x]=find(p[x]);
}
int ans()
{
    int sum=0;
    for(int i=0;i<cnt;i++)
    {
        int x=find(road[i].f);
        int y=find(road[i].t);
        if(x!=y)
        {
            sum+=road[i].mon;
            p[x]=y;
            if(mas<road[i].mon)
            mas=road[i].mon;//求出最小生成树里的最大节点的值!
        }
    }
    return sum;
}
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        memset(p,-1,sizeof(p));//根节点初始化!
        cnt=mas=0;//初始化节点数和最大价钱数!
        while(m--)
        {
            int f,t,c;
            scanf("%d%d%d",&f,&t,&c);
            road[cnt].f=f;
            road[cnt].t=t;
            road[cnt++].mon=c;
        }
        sort(road,road+cnt);
        int sum=ans();//求出最小花费!
        //cout<<"本应该花费钱:"<<sum<<" ;"<<"最大花费:"<<mas<<endl;
        cout<<mas*(n-1)-sum<<endl;//俊爷能赚我多少钱呢??0.0
    }
    return 0;
}





Description

       俊爷最近投资创办了一家局域网公司,这家公司的业务不仅有地球上的业务,也有外太空的业务。由于DB星球除了钱什么都没有,作为首领的DBZ请俊爷帮他们星球建成局域网。俊爷当然想拿下这笔生意,我们知道A与B联通并且B与C联通,那么A与C也是联通的,现在DBZ要求将DB星球上的所有城市都联通。

       俊爷最近有点伤感,他本想趁这个机会多赚一笔,哪知精明的DBZ已经学会如何架设线路费用才是最小的。但DBZ给了俊爷一个机会,他对每条路径支付的费用为俊爷建设的所有路径中的最大值。那么现在俊爷想知道他到底可以赚到DBZ多少钱?(当然如果俊爷欺骗DBZ,那么后果很严重,DBZ将会寻找其他公司架设)。

       俊爷架设一个单位长度的线路需要1DBB(DBB星球的货币)

Input

      测试数据包含多组。

      每组测试数据包含若干行,第一行包含n ( 1  < = n < = 100000 ) , m ( 1 < = m < = 1000000 ) 。代表DB星球有n个城市,m条路径。

     接下来的m行每行包含3个整数,u,v ( 1< = u,v < = n ) , c ( 1 < = c < = 1000 000 000 ) 代表从城市u到城市v有一条距离为c的路径。 

Output

      输出仅包含一个数,为俊爷能赚多少钱。

Sample Input

3 3 1 2 31 2 52 3 5

Sample Output

2

Problem I: 俊爷的局域网