• NYOJ 38 布线问题_(解法1 Kruskal算法)


    时间限制:1000 ms  |  内存限制:65535 KB
    难度:4
    描写叙述
    南阳理工学院要进行用电线路改造。如今校长要求设计师设计出一种布线方式,该布线方式须要满足下面条件:
    1、把全部的楼都供上电。
    2、所用电线花费最少
    输入
    第一行是一个整数n表示有n组測试数据。

    (n<5)
    每组測试数据的第一行是两个整数v,e.
    v表示学校里楼的总个数(v<=500)
    随后的e行里,每行有三个整数a,b,c表示a与b之间假设建铺设线路花费为c(c<=100)。(哪两栋楼间假设没有指明花费,则表示这两栋楼直接连通须要费用太大或者不可能连通)
    随后的1行里。有v个整数,当中第i个数表示从第i号楼接线到外界供电设施所须要的费用。( 0<e<v*(v-1)/2 )
    (楼的编号从1開始),因为安全问题,仅仅能选择一个楼连接到外界供电设备。


    数据保证至少存在一种方案满足要求。

    输出
    每组測试数据输出一个正整数,表示铺设满足校长要求的线路的最小花费。
    例子输入
    1
    4 6
    1 2 10
    2 3 10
    3 1 10
    1 4 1
    2 4 1
    3 4 1
    1 3 5 6
    例子输出
    4


    代码例如以下

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    const int MAXN = 505 ;
    
    struct ArcNode
    {
    	int v1,v2;		//v1、v2表示可连通的楼
    	int cost;	//cost表示连通v1、v2的花费
    };
    
    int father[MAXN],add[MAXN];
    int v,e,s;
    
    bool cmp(const ArcNode &lhs, const ArcNode &rhs)
    {
    	return lhs.cost < rhs.cost;
    }
    
    void Kruskal(ArcNode *node)
    {
    	int i,j,k,x,y;
    	i=j=0;
    	s=0;
    	while(j<v-1)
    	{
    		x=father[node[i].v1-1];
    		y=father[node[i].v2-1];
    		if (x!=y)
    		{
    			for(k=0;k<v;k++)
    				if(father[k]==y)
    					father[k]=x;
    			s+=node[i].cost;
    			++j;
    		}
    		++i;
    	}
    }
    
    
    int main()
    {
    	int n;
    	int i;
    	scanf("%d",&n);
    	while(n--)
    	{
    		scanf("%d%d",&v,&e);
    		ArcNode *node=new ArcNode[e];
    		for(i=0;i<e;i++)
    			scanf("%d%d%d",&node[i].v1,&node[i].v2,&node[i].cost);
    
    		sort(node,node+e,cmp);
    
    		for(i=0;i<v;i++)
    		{
    			scanf("%d",&add[i]);
    			father[i]=i;
    		}
    
    		sort(add,add+v);
    
    		Kruskal(node);		//运用克鲁斯卡尔算法求出cost值最小的连通图
    
    		printf("%d
    ",s+add[0]);
    		delete[] node;
    		node=NULL;
    	}
    	return 0;
    }



  • 相关阅读:
    完成一个Laravel项目的过程
    composer的安装以及具体使用
    mongoDB命令
    test
    豆瓣自动注册、回贴脚本 powered by Python & Selenium
    memcache和redis的对比
    高并发下缓存和数据库一致性问题(更新淘汰缓存不得不注意的细节)
    使用PHP连接、操纵Memcached的原理和教程
    php面向对象 ::、-&gt;、self、$this几种操作符的区别介绍
    nginx url 重写
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7225387.html
Copyright © 2020-2023  润新知