POJ 1287 Networking (最小生成树)
2015-06-02 21:08
323 查看
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 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
Sample Output
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 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
#include <iostream> #include <cstdio> #include <string> #include <queue> #include <vector> #include <map> #include <algorithm> #include <cstring> #include <cctype> #include <cstdlib> #include <cmath> #include <ctime> using namespace std; const int SIZE = 105; int N,M; int FATHER[SIZE]; int MAP[SIZE][SIZE]; struct Node { int from,to,cost; }G[SIZE]; void ini(void); int find_father(int); void unite(int,int); bool same(int,int); bool comp(const Node &,const Node &); int kruskal(void); int main(void) { int from,to,cost; while(~scanf("%d",&N)) { if(!N) break; scanf("%d",&M); ini(); for(int i = 0;i < M;i ++) scanf("%d%d%d",&G[i].from,&G[i].to,&G[i].cost); sort(G,G + M,comp); printf("%d\n",kruskal()); } return 0; } void ini(void) { fill(&MAP[0][0],&MAP[SIZE - 1][SIZE - 1],-1); for(int i = 1;i <= N;i ++) FATHER[i] = i; } int find_father(int n) { if(n == FATHER ) return n; return FATHER = find_father(FATHER ); } void unite(int x,int y) { x = find_father(x); y = find_father(y); if(x == y) return ; FATHER[x] = y; } bool same(int x,int y) { return find_father(x) == find_father(y); } int kruskal(void) { int ans = 0,count = 0; for(int i = 0;i < M;i ++) if(!same(G[i].from,G[i].to)) { unite(G[i].from,G[i].to); ans += G[i].cost; count ++; if(count == N - 1) break; } return ans; } bool comp(const Node & a,const Node & b) { return a.cost < b.cost; }
相关文章推荐
- .net mvc4 从客户端中检测到有潜在危险的 Request.Form 值
- Swiper使用说明
- opencv源码研究: icvGetHaarTrainingDataFromBG和icvGetHaarTrainingDataFromVec的区别
- 理解JS原型以及实现继承
- Linux内核编程接口函数
- 由几道JS笔试题引发的知识点探究
- 8.18在类模板外定义成员函数,实现3个数求和
- VMware中Ubuntu 14.04出现Unknown Display问题解决
- 搭建嵌入式开发环境总结
- 微软100题(58)倒叙输出链表
- IIC(Inter-Integrated Circuit)总线协议浅谈
- 【hbase】——HBase 写优化之 BulkLoad 实现数据快速入库
- ACM算法
- Oracle基础(六):Oracle 函数
- Core Animation 官方文档第四章(建立图层的层次结构)
- 结构体中的位域
- 海马汽车经销商管理系统技术解析(十一)前台接待模块的接车功能
- 给golang增加websocket模块
- 页面中到达顶部和底部的按钮
- hdu - 2645 find the nearest station (bfs水)