ZOJ2326Tangled in Cables(最小生成树)
来源:互联网 发布:软件开发工作描述 编辑:程序博客网 时间:2024/06/11 17:09
You are the owner of SmallCableCo and have purchased the franchise rights for a small town. Unfortunately, you lack enough funds to start your business properly and are relying on parts you have found in an old warehouse you bought. Among your finds is a single spool of cable and a lot of connectors. You want to figure out whether you have enough cable to connect every house in town. You have a map of town with the distances for all the paths you may use to run your cable between the houses. You want to calculate the shortest length of cable you must have to connect all of the houses together.
Input
Only one town will be given in an input.
- The first line gives the length of cable on the spool as a real number.
- The second line contains the number of houses, N
- The next N lines give the name of each house's owner. Each name consists of up to 20 characters {a�Cz,A�CZ,0�C9} and contains no whitespace or punctuation.
- Next line: M, number of paths between houses
- next M lines in the form
<house name A> <house name B> <distance>
Where the two house names match two different names in the list above and the distance is a positive real number. There will not be two paths between the same pair of houses.
Output
The output will consist of a single line. If there is not enough cable to connect all of the houses in the town, output
Not enough cable
If there is enough cable, then output
Need <X> miles of cable
Print X to the nearest tenth of a mile (0.1).
Sample Input
100.0
4
Jones
Smiths
Howards
Wangs
5
Jones Smiths 2.0
Jones Howards 4.2
Jones Wangs 6.7
Howards Wangs 4.0
Smiths Wangs 10.0
Sample Output
Need 10.2 miles of cable
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{int start;int end;double cost;}t[1001000];int cmp(node a,node b){return a.cost <b.cost ;}int per[11000];int find(int x){int r=x;while(r!=per[r])r=per[r];return r;}int join(int x,int y){int fx=find(x);int fy=find(y);if(fx!=fy){per[fx]=fy;return 1;}return 0;}int main(){double total;int i,n,m,j,k;char c[10000][25],s[25],ch[25];scanf("%lf",&total);for(i=0;i<11000;i++)per[i]=i;scanf("%d",&m);for(i=0;i<m;i++)scanf("%s",c[i]);scanf("%d",&n);for(i=0;i<n;i++){scanf("%s%s%lf",s,ch,&t[i].cost);for(j=0;j<m;j++){if(strcmp(s,c[j])==0)t[i].start=j;if(strcmp(ch,c[j])==0)t[i].end =j;}}sort(t,t+n,cmp);double sum=0.0;for(i=0;i<n;i++)if(join(t[i].start,t[i].end))sum=sum+t[i].cost;if(sum>total)printf("Not enough cable\n");elseprintf("Need %.1lf miles of cable\n",sum);return 0;}
用prim在杭电能过,附杭电ac代码:
<pre name="code" class="cpp">#include<stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include <ctype.h>#define N 10000#define M 1000000 #include <algorithm>using namespace std;int n, m, ncount, pre[N];char name[N][21];float sum_len, min_len;struct edge{ int x, y; float len;}node[M];bool cmp(struct edge a, struct edge b){ return a.len < b.len;}int search_name(char * s){ int i; for(i=1; i<=n; i++) if( !strcmp(s, name[i]) ) return i;}void input() { int i, x, y; char s[21]; scanf("%d", &n); for(i=1; i<=n; i++) scanf("%s", name[i]); scanf("%d", &m); for(i=1; i<=m; i++) { scanf("%s", s); x = search_name(s); scanf("%s", s); y = search_name(s); ncount++; node[ ncount ].x = x; node[ ncount ].y = y; scanf("%f", &node[ ncount ].len); } }int find_pre(int x){ while( x != pre[x] ) x = pre[x]; return x;} void kruskal(){ int i, j, a, b; for(i=1; i<=n; i++) pre[i] = i; sort(node+1, node+m+1, cmp); for(i=1; i<=m; i++) { a = find_pre( node[i].x ); b = find_pre( node[i].y ); if( a != b ) { min_len += node[i].len; pre[ b ] = a; } } if(sum_len < min_len) printf("Not enough cable\n");elseprintf("Need %.1f miles of cable\n", min_len);}int main(){int i;while( scanf("%f", &sum_len) != EOF ){ ncount = 0;min_len = 0; input(); kruskal(); } return 0; }
- ZOJ2326Tangled in Cables(最小生成树)
- zoj2326Tangled in Cables
- poj 2075 -- Tangled in Cables(最小生成树)
- ZOJ 2326 Tangled in Cables(最小生成树--prime)
- POJ 2075 Tangled in Cables(最小生成树)
- zoj 2326 Tangled in Cables 最小生成树
- poj2075Tangled in Cables (最小生成树之prim)
- poj2075 Tangled in Cables 最小生成树+map,kruskal
- POJ 2075 Tangled in Cables(最小生成树)
- POJ 2075 Tangled in Cables 最小生成树
- POJ 2075 Tangled in Cables 最小生成树 Kruskal && Prim
- poj 2075 Tangled in Cables【最小生成树+字符串处理】
- zoj 2326 Tangled in Cables【最小生成树 kruskal && prim】
- POJ 2075 Tangled in Cables(最小生成树 kruscal)
- CUGB图论专场:C - Tangled in Cables(最小生成树kruscal)
- Pku acm 2075 Tangled in Cables数据结构题目解题报告(十一)最小生成树:prim算法&amp;二叉查找树
- Pku acm 2075 Tangled in Cables数据结构题目解题报告(十一)最小生成树:prim算法&amp;二叉查找树
- poj -- 2075 Tangled in Cables (mst)
- 08-12 Serverlet 数据库连接、doPost方法 HttpClientDoGet HTTPClientDoPost
- 2015/08/12一些想法
- SQL Server执行计划的理解
- Linux基础一(个人整理)
- mongodb官网文档阅读笔记:与写性能相关的几个因素
- ZOJ2326Tangled in Cables(最小生成树)
- 经典C语言能力测试题(值得一看)
- 二叉树的建立以及先序中序后序递归遍历
- 直方图均衡算法
- SQL行转列
- 线性规划、梯度下降、正规方程组——斯坦福ML公开课笔记1-2
- UI11_Block传值
- 深入浅出 - Android系统移植与平台开发(十) - led HAL简单设计案例分析
- C语言运算符优先级 之 快速记忆