ZOJ2326Tangled in Cables(最小生成树)
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
#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(最小生成树)的更多相关文章
- UVALive 4872 Underground Cables 最小生成树
题目链接: 题目 Underground Cables Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %ll ...
- POJ 2075 Tangled in Cables 最小生成树
简单的最小生成树,不过中间却弄了很久,究其原因,主要是第一次做生成树,很多细节不够熟练,find()函数的循环for判断条件是 pre[i]>=0,也就是遇到pre[i]==-1时停止,i就是并 ...
- 图论常用算法之一 POJ图论题集【转载】
POJ图论分类[转] 一个很不错的图论分类,非常感谢原版的作者!!!在这里分享给大家,爱好图论的ACMer不寂寞了... (很抱歉没有找到此题集整理的原创作者,感谢知情的朋友给个原创链接) POJ:h ...
- poj2075
Tangled in Cables Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6348 Accepted: 2505 ...
- UvaLive 4872 Underground Cables (最小生成树)
题意: 就是裸的最小生成树(MST), 完全图, 边长是实数. 分析: 算是复习一下MST把 方法一: prim 复杂度(n^2) #include <bits/stdc++.h> usi ...
- URAL 1160 Network(最小生成树)
Network Time limit: 1.0 secondMemory limit: 64 MB Andrew is working as system administrator and is p ...
- POJ 1287 Networking (最小生成树)
Networking 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/B Description You are assigned ...
- ZOJ 1542 POJ 1861 Network 网络 最小生成树,求最长边,Kruskal算法
题目连接:problemId=542" target="_blank">ZOJ 1542 POJ 1861 Network 网络 Network Time Limi ...
- POJ 1287 Networking(最小生成树)
题意 给你n个点 m条边 求最小生成树的权 这是最裸的最小生成树了 #include<cstdio> #include<cstring> #include<algor ...
随机推荐
- map和multimap映射容器
map容器 map所处理的数据与数据库表具有键值的记录非常相似,在键值与映射数据之间,建立一个数学上的映射关系.map容器的数据结构仍然採用红黑树进行管理.插入的元素键值不同意反复,所使用的结点元素的 ...
- android:px,dp(dip),sp的差别
1.px:表示屏幕的实际像素,比如320*480的屏幕在横向有320个像素,在纵向有480个像素,假设指定的某个空间的单位为px.那么在不同分辨率下的手机上.显示的都是指定的大小.一般不推荐使用px. ...
- 纯文本中识别URI地址并转换成HTML
问题 有一段纯文本text, 欲将其插入DOM节点div中. text中可能有超链接, 邮件地址等. 假设有, 识别之. 分析 假设仅仅是纯文本, 插入div中, 仅仅要将div.innerText设 ...
- JDBC-连接数据库代码
package com.zxc.connection; import java.sql.Connection; import java.sql.DriverManager; public class ...
- 【Linux探索之旅】第二部分第三课:文件和文件夹,组织不会亏待你
wx_fmt=jpeg" alt="" style="max-width:100%; height:auto!important"> 内容简单介 ...
- android sudio 执行的中文是乱码解决方式
1.File-->Setings-->查找file encodings 例如以下图 2.将 IDE Encoding .Project Encoding.Default encoding ...
- CxImage的使用及基本用法
基本定义:CxImage类库是一个优秀的图像操作类库.它可以快捷地存取.显示.转换各种图像. 下载地址:http://www.codeproject.com/KB/graphics/cximage.a ...
- zookeeper客户端命令行操作
一.命令行 (1)使用zookeeper安装bin目录下的./zkCli.sh连接到zookeeper服务器上,基本语法如下: ./zkCli.sh -timeout 0 -r -server ip: ...
- Windows phone解决GB2312编码问题
环境win8+vse for Windows phone 在网站http://encoding4silverlight.codeplex.com/上点击下载 之后有三个文件big5.bin,DBCSE ...
- 10 quick tips for Redis
Redis is hot in the tech community right now. It's come a long way from being a small personal proje ...