描述

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.

输入

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~z, A~Z,0~9} 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.

输出

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).

样例输入

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

样例输出

Need 10.2 miles of cable

题目来源

Mid-Atlantic 2004

#include <stdio.h>
#include <string.h>
#define MAXN 350
#define inf 0x3f3f3f3f int N,M;
char p[MAXN][25];
double map[MAXN][MAXN];
int visited[MAXN];
double dist[MAXN]; int find(char ch[25]){
for(int i=1; i<=N; i++){
if(strcmp(p[i],ch)==0)return i;
}
return 0;
}
double prim(int begin){
double r=0;
for(int i=1; i<=N; i++){
visited[i]=false;
dist[i]=map[begin][i];
}
visited[begin]=true;
for(int j=1; j<N; j++){
int k=-1;
double min=inf;
for(int i=1; i<=N; i++){
if(!visited[i]&&dist[i]<min){
min=dist[i];
k=i;
}
}
if(min!=inf){
r+=min;
}
visited[k]=true;
for(int i=1; i<=N; i++){
if(!visited[i]&&map[k][i]<dist[i]){
dist[i]=map[k][i];
}
}
}
return r;
}
int main(int argc, char *argv[])
{
double len,w;
char a[25],b[25];
while(scanf("%lf",&len)!=EOF){
scanf("%d",&N);
for(int i=1; i<=N; i++){
scanf("%s",p[i]);
}
for(int i=1; i<=N; i++){
for(int j=1; j<=N; j++){
if(i==j)map[i][j]=0;
else map[i][j]=inf;
}
}
scanf("%d",&M);
while(M--){
scanf("%s %s %lf",a,b,&w);
int u=find(a);
int v=find(b);
map[u][v]=w;
map[v][u]=w;
}
double ans=prim(1);
if(ans<=len){
printf("Need %.1lf miles of cable\n",ans);
}else{
printf("Not enough cable\n");
}
}
return 0;
}

TOJ 2119 Tangled in Cables的更多相关文章

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

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

  2. Tangled in Cables(Kruskal+map容器处理字符串)

    /** 题意:     给你两个城市之间的道路(无向图),求出需要的     电缆.如果大于所提供的,就输出Not enough ...     否则输出所需要的电缆长度.       输入:N (给 ...

  3. POJ 2075 Tangled in Cables (c++/java)

    http://poj.org/problem?id=2075 题目大意: 给你一些人名,然后给你n条连接这些人名所拥有的房子的路,求用最小的代价求连接这些房子的花费是否满足要求. 思路: 昨天20分钟 ...

  4. ZOJ2326Tangled in Cables(最小生成树)

    Tangled in Cables Time Limit: 2 Seconds      Memory Limit: 65536 KB You are the owner of SmallCableC ...

  5. HOJ题目分类

    各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...

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

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

  7. poj2075

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

  8. BZOJ 2119: 股市的预测 [后缀数组 ST表]

    2119: 股市的预测 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 331  Solved: 153[Submit][Status][Discuss ...

  9. TOJ 2776 CD Making

    TOJ 2776题目链接http://acm.tju.edu.cn/toj/showp2776.html 这题其实就是考虑的周全性...  贡献了好几次WA, 后来想了半天才知道哪里有遗漏.最大的问题 ...

随机推荐

  1. springcloud集成swaggerui做动态接口文档

    1.配置文件pom,一定要使用2.4以上的,2.4默认请求方式是json,会导致getmapping设置参数类型对对象时,swaggerui界面不能指定为其他类型,反正就是各种坑,不建议用 <d ...

  2. java处理中国气象数据,提取汇总陕西地区24小时各观测点的数据(csv格式)

    1.先贴一下气象数据的csv源格式,由于数据内容较多,就放一部分(china_sites_20150102.csv) date,hour,type,1001A,1002A,1003A,1004A,10 ...

  3. codevs 3044 矩形面积求并

    3044 矩形面积求并   题目描述 Description 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入描述 Input Description 可能有多组数据,读到n=0为止(不 ...

  4. 【guava】字符串操作

    一,Strings类 public void testStrings(){ Strings.isNullOrEmpty("");//返回true Strings.nullToEmp ...

  5. JavaScript学习笔记——4.数组

    数组(Array) 数组也是一个对象   数组中保存的内容我们称为元素 数组的操作 - 创建数组 - var arr = new Array();   - var arr = []; 例如:var m ...

  6. POJ1358 Agri-Net

    题目链接 就是裸的最小生成树,复习一下. prim算法: G=(V,E),V是点集,E是边集 假设T=(U,TE)是最小生成树.U,TE初始化为空 首先从V中任取一点 假设取V1,然后U={V1},只 ...

  7. [Beta阶段]第一次Scrum Meeting

    Scrum Meeting博客目录 [Beta阶段]第一次Scrum Meeting 基本信息 名称 时间 地点 时长 第一次Scrum Meeting 19/04/29 大运村寝室6楼 70min ...

  8. Python + gevent模块对单个接口进行并发测试 1

    本文知识点 利用gevent模块进行并发测试 代码如下 from gevent import monkey monkey.patch_all() import requests import geve ...

  9. EasyUI学习笔记(四)—— datagrid的使用

    一.传统的HTML表格 之前我们做表格的时候是这样写的: <table > <thead> <tr> <th>编号</th> <th& ...

  10. 开发环境,eclipse编辑器java代码自动提示

    Eclipse+ADT+Android SDK 搭建安卓开发环境 eclipse编辑器java代码自动提示 window-->Preferences-->JAva-->Content ...