当前位置: 首页 > news >正文

ZOJ1372 POJ 1287 Networking 网络设计 Kruskal算法

题目链接:ZOJ1372 POJ 1287 Networking 网络设计

Networking

Time Limit: 2 Seconds       Memory Limit: 65536 KB

You are assigned to design network connections between certain points in a wide area. You are given a set of points in the area, and a set of possible routes for the cables that may connect pairs of points. For each possible route between two points, you are given the length of the cable that is needed to connect the points over that route. Note that there may exist many possible routes between two given points. It is assumed that the given possible routes connect (directly or indirectly) each two points in the area.

Your task is to design the network for the area, so that there is a connection (direct or indirect) between every two points (i.e., all the points are interconnected, but not necessarily by a direct cable), and that the total length of the used cable is minimal.


Input

The input file consists of a number of data sets. Each data set defines one required network. The first line of the set contains two integers: the first defines the number P of the given points, and the second the number R of given routes between the points. The following R lines define the given routes between the points, each giving three integer numbers: the first two numbers identify the points, and the third gives the length of the route. The numbers are separated with white spaces. A data set giving only one number P=0 denotes the end of the input. The data sets are separated with an empty line.

The maximal number of points is 50. The maximal length of a given route is 100. The number of possible routes is unlimited. The nodes are identified with integers between 1 and P (inclusive). The routes between two points i and j may be given as i j or as j i.


Output

For each data set, print one number on a separate line that gives the total length of the cable used for the entire designed network.


Sample Input

1 0

2 3
1 2 37
2 1 17
1 2 68

3 7
1 2 19
2 3 11
3 1 7
1 3 5
2 3 89
3 1 91
1 2 32

5 7
1 2 5
2 3 7
2 4 8
4 5 11
3 5 10
1 5 6
4 2 12

0


Sample Output

0
17
16
26


题意:

设计一个网络连接某个区域的一些点。以及这些地点之间能够用网线连接的线路。对每条线路。给定了连接这两个地方所需网线的长度。

注意,两个地点之间的线路可能有多条。假定,给定的线路能够直接或间接地连接该地区中的全部地点。

试为这个地区设计一个网络系统。使得该地区全部地点都能够连接,而且使用的网线长度最短。

分析:

最小生成树,採用Kruskal算法可以规避重边的问题。由于边是依照长度从小到大排序,因而当选择了长度短的边后便不会选择长度更长的重边。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

#define maxm 1300
int parent[55];
int ans, m;
struct edge
{
    int u, v, w;
}EG[maxm];
bool cmp(edge a, edge b)
{
    return a.w < b.w;
}
int Find(int x)
{
    if(parent[x] == -1) return x;
    return Find(parent[x]);
}
void Kruskal()
{
    memset(parent, -1, sizeof(parent));
    ans = 0;
    sort(EG, EG+m, cmp);
    for(int i = 0; i < m; i++)
    {
        int t1 = Find(EG[i].u), t2 = Find(EG[i].v);
        if(t1 != t2)
        {
            ans += EG[i].w;
            parent[t1] = t2;
        }
    }
}
int main()
{
    int n;
    while(scanf("%d", &n), n)
    {
        scanf("%d", &m);
        for(int i = 0; i < m; i++)
            scanf("%d%d%d", &EG[i].u, &EG[i].v, &EG[i].w);
        Kruskal();
        printf("%d\n", ans);
    }
    return 0;
}




相关文章:

  • UVA 10689 Yet another Number Sequence
  • Web 服务器基准测试,nginx+php vs Apache+php
  • 如何使用一台PC搭建可以在线迁移的KVM学习环境
  • 【转】linux(Ubuntu)配置svn仓库,搭建svn服务器
  • JQuery判断数组中是否包含某个元素$.inArray(元素字符串, 数组名称);
  • eclipse安装pydev
  • 看opengl写代码(7) 使用混合数组(glInterLeavedArrays)
  • 将已有项目导入Gitlab
  • innerText兼容处理
  • ./configure,make,make install的作用(转)
  • hdu 5080 2014ACM/ICPC鞍山K题 polya计数
  • Java并发编程:Semaphore、CountDownLatch、CyclicBarrier
  • 我的Android进阶之旅------Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能...
  • 利用ReadWriterLock 写一个简单的缓存
  • url参数
  • [笔记] php常见简单功能及函数
  • CSS魔法堂:Absolute Positioning就这个样
  • js ES6 求数组的交集,并集,还有差集
  • js对象的深浅拷贝
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Mysql优化
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • passportjs 源码分析
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 深入 Nginx 之配置篇
  • 算法-图和图算法
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • #Ubuntu(修改root信息)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (四) 虚拟摄像头vivi体验
  • (四)Linux Shell编程——输入输出重定向
  • (转)shell调试方法
  • (转载)OpenStack Hacker养成指南
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .net core 依赖注入的基本用发
  • .net web项目 调用webService
  • /*在DataTable中更新、删除数据*/
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @JsonSerialize注解的使用
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [100天算法】-目标和(day 79)
  • [c语言]小课堂 day2
  • [Design Pattern] 工厂方法模式
  • [IE技巧] IE8中HTTP连接数目的变化
  • [JavaWeb玩耍日记]Maven的安装与使用
  • [js]- 两个对象的合并(Object.assign)