Tangled in Cables


Time Limit: 2 Seconds      Memory Limit: 65536 KB


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

一道奇妙的最小生成树。最终变了花样。一般easy出现
上述情况,就是数组开的小了.
可是在zoj过了,在杭电wa了。真是一道奇妙的题;
附ac代码:
#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");
else
printf("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");
else
printf("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(最小生成树)的更多相关文章

  1. UVALive 4872 Underground Cables 最小生成树

    题目链接: 题目 Underground Cables Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %ll ...

  2. POJ 2075 Tangled in Cables 最小生成树

    简单的最小生成树,不过中间却弄了很久,究其原因,主要是第一次做生成树,很多细节不够熟练,find()函数的循环for判断条件是 pre[i]>=0,也就是遇到pre[i]==-1时停止,i就是并 ...

  3. 图论常用算法之一 POJ图论题集【转载】

    POJ图论分类[转] 一个很不错的图论分类,非常感谢原版的作者!!!在这里分享给大家,爱好图论的ACMer不寂寞了... (很抱歉没有找到此题集整理的原创作者,感谢知情的朋友给个原创链接) POJ:h ...

  4. poj2075

    Tangled in Cables Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 6348   Accepted: 2505 ...

  5. UvaLive 4872 Underground Cables (最小生成树)

    题意: 就是裸的最小生成树(MST), 完全图, 边长是实数. 分析: 算是复习一下MST把 方法一: prim 复杂度(n^2) #include <bits/stdc++.h> usi ...

  6. URAL 1160 Network(最小生成树)

    Network Time limit: 1.0 secondMemory limit: 64 MB Andrew is working as system administrator and is p ...

  7. POJ 1287 Networking (最小生成树)

    Networking 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/B Description You are assigned ...

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

    题目连接:problemId=542" target="_blank">ZOJ 1542 POJ 1861 Network 网络 Network Time Limi ...

  9. POJ 1287 Networking(最小生成树)

    题意  给你n个点 m条边  求最小生成树的权 这是最裸的最小生成树了 #include<cstdio> #include<cstring> #include<algor ...

随机推荐

  1. 【【henuacm2016级暑期训练】动态规划专题 I】Gargari and Permutations

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 注意这k个序列每个都是排列. 如果在每个序列中都满足y出现在x之后的话. 那么我们从x连一条有向边至y (有一个序列不满足就不连 ( ...

  2. hdu4927 Series 1(组合+公式 Java大数高精度运算)

    题目链接: Series 1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) ...

  3. [Python + Unit Testing] Write Your First Python Unit Test with pytest

    In this lesson you will create a new project with a virtual environment and write your first unit te ...

  4. HDU 5187 zhx&#39;s contest(防爆__int64 )

    Problem Description As one of the most powerful brushes, zhx is required to give his juniors n probl ...

  5. nginx源代码分析--从源代码看nginx框架总结

    nginx源代码总结: 1)代码中没有特别绕特别别扭的编码实现.从变量的定义调用函数的实现封装,都非常恰当.比方从函数命名或者变量命名就能够看出来定义的大体意义,函数的基本功能,再好的架构实如今编码习 ...

  6. codevs 3372 选学霸(hash+并查集+多重背包)

    先通过并查集处理出来有多少种不同的集合,每一个集合有多少人.一定要不要忘记了与别的没有联系的独立点. 并查集的时候能够通过hash处理出来每一个数目同样的集合的个数. 这样以人数为权值.个数为限制进行 ...

  7. nyoj--301--递推求值(经典矩阵运算)

    递推求值 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给你一个递推公式: f(x)=a*f(x-2)+b*f(x-1)+c 并给你f(1),f(2)的值,请求出f(n ...

  8. 详解JSP九个内置对象

    [JSP]☆★之详解九个内置对象       在web开发中,为方便开发者,JSP定义了一些由JSP容器实现和管理的内置对象,这些对象可以直接被开发者使用,而不需要再对其进行实例化!本文详解,JSP2 ...

  9. MongoDB 系列(二) C# 内嵌元素操作 聚合使用

    "_id" : "639d8a50-7864-458f-9a7d-b72647a3d226","ParentGuid" : "00 ...

  10. (三)Fegin声明式服务调用

    上一篇,讲了SpringClound中的消费者采用Ribbon+Rest来实现,这回我们用组件Feign来实现服务的消费者,Fegin中也是默认集成了Ribbon的;和Eureka结合也能实现负载均衡 ...