poj2075
| Time Limit: 1000MS | Memory Limit: 30000K | |
| Total Submissions: 6348 | Accepted: 2505 |
Description
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.
Output
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
Source
POJ2075 Tangled in Cables 最小生成树
题目大意:
给你一些人名,然后给你n条连接这些人名所拥有的房子的路,求用最小的代价求连接这些房子的花费是否满足要求。
#include<cstdio>
#include<cstring>
#include<string>
#include<map>
#include<algorithm>
#include<iostream>
using namespace std;
#define N 15010
map<string,int>ad;
struct node{
int x,y;
double v;
node(int x=,int y=,double v=):x(x),y(y),v(v){}
}e[N];
int n,m,fa[N];double money;
int find(int x){
return fa[x]==x?x:fa[x]=find(fa[x]);
}
bool cmp(const node &a,const node &b){
return a.v<b.v;
}
int main(){
freopen("sh.in","r",stdin);
scanf("%lf%d",&money,&n);
for(int i=;i<=n;i++){
char str[];
scanf("%s",str);
ad[str]=i;
}
scanf("%d",&m);
for(int i=;i<=m;i++){
char c1[],c2[];
double cost;
scanf("%s %s %lf",c1,c2,&cost);
e[i].x=ad[c1];
e[i].y=ad[c2];
e[i].v=cost;
}
sort(e+,e+m+,cmp);
double ans=;int k=;
for(int i=;i<=n;i++) fa[i]=i;
for(int i=;i<=m;i++){
int fx=find(e[i].x),fy=find(e[i].y);
if(fx!=fy){
fa[fy]=fx;
ans+=e[i].v;
k++;
}
if(k==n-) break;
}
if(money>ans) printf("Need %.1lf miles of cable\n",ans);
else printf("Not enough cable\n");
return ;
}
poj2075的更多相关文章
- OJ题目分类
POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006 POJ1008 POJ1013 P ...
随机推荐
- Python命令行参数学习
man python 查看python的帮助文件 命令行参数: -B Don't write .py[co] files on import. See a ...
- Java算法题:兔子问题
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 解题思路: public int exp(int ...
- 深入理解dataset及其用法
DataSet是ADO.NET的中心概念.可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合.所谓独立, 就是说,即使断开数据链路,或者关闭数据库,DataSet依然 ...
- hive 导入csv文件
创建hive表: create table table_name( id string, name string, age string ) row format serde 'org.apache. ...
- QT静态库和动态库的导出
因为静态库是不须要导出的.所以在写QT的前置声明的时候须要说明 #if defined(QT_SHARED) #ifdef COMMONLIB #define COMMONLIB_EXPORT Q_D ...
- P6 EPPM 安装和配置指南
In This Section Installation and Configuration Guide Manual Installation Guides P6 Professional Inst ...
- 安全狗两个中危提权+NET提权
1.循环加组复现 for /l %%i in (1,1,1000) do @net user admin admin /add&@ net localgroup administrators ...
- Time.timeScale 时间缩放
static var timeScale : float Description描述 The scale at which the time is passing. This can be used ...
- C语言之基本算法33—矩阵的基本运算
//矩阵基础 /* ================================================================== 题目:输入矩阵a,b,输出a,b,a的转置矩阵 ...
- linux 文件&文件夹大小排序
按照当前文件夹的文件大小排序: ls -l | sort -k 5 -n -r 其中 sort 的几个参数: -k 5: 表示使用第五列字段排序, 当需要按照多个字段排序时, 可使用多个 -k 参数, ...