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;
}
时间: 2024-07-31 14:32:52

ZOJ1372 POJ 1287 Networking 网络设计 Kruskal算法的相关文章

[2016-04-14][POJ][1287][Networking]

时间:2016-04-14 14:48:44 星期四 题目编号:[2016-04-14][POJ][1287][Networking] 题目大意:求最小生成树 分析:直接prim算法,更新边的时候,重边取最小值 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn = 50 + 10; const int inf = 0x3f3f3f3f; i

poj 1789 Truck History(kruskal算法)

题目链接:http://poj.org/problem?id=1789 思路:把每一行看成一个一个点,每两行之间不懂得字符个数就看做是权值.然后用kruskal算法计算出最小生成树 我写了两个代码一个是用优先队列写的,但是超时啦,不知道为什么,希望有人可以解答.后面用的数组sort排序然后才AC. code: 数组sort排序AC代码: #include<cstdio> #include<queue> #include<algorithm> #include<io

POJ 1287 Networking (最小生成树)

Networking Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1287 Appoint description:  System Crawler  (2015-06-02) Description You are assigned to design network connections between certain poin

POJ - 1287 Networking

题目链接:http://poj.org/problem?id=1287 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 分析:最小生成树纯模板 1 #include <cstdio> 2 #include &

POJ 2075 Tangled in Cables (kruskal算法 MST + map)

Tangled in Cables Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 6039   Accepted: 2386 Description You are the owner of SmallCableCo and have purchased the franchise rights for a small town. Unfortunately, you lack enough funds to start

POJ 1287 Networking(最小生成树)

题意  给你n个点 m条边  求最小生成树的权 这是最裸的最小生成树了 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 55, M = 3000; int par[N], n, m, ans; struct edge{int u, v, w;} e[M]; bool cmp(edge a, edge b){return a.w < b

POJ 1287 Networking【MST模板题】

Networking Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8214 Accepted: 4528 Description 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 possib

POJ 1287 Networking (最小生成树模板题)

Description 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

ZOJ 1542 POJ 1861 Network 网络 最小生成树,求最长边,Kruskal算法

题目连接:ZOJ 1542 POJ 1861 Network 网络 Network Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge Andrew is working as system administrator and is planning to establish a new network in his company. There will be N hubs in the company, t