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 ...
随机推荐
- (转载)maven profile多环境自动切换配置
原文:https://www.cnblogs.com/adeng/p/7059588.html 痛点: 在java开发的过程中,我们经常要面对各种各样的环境,比如开发环境,测试环境,正式环境,而这些环 ...
- 一个通用Makefile的编写
作者:杨老师,华清远见嵌入式学院讲师. 我们在Linux环境下开发程序,少不了要自己编写Makefile,一个稍微大一些的工程下面都会包含很多.c的源文件.如果我们用gcc去一个一个编译每一个源文件的 ...
- 【网络协议】TCP协议简单介绍
本文仅仅是对TCP协议做个简要的介绍. TCP协议,即传输控制协议.与UDP协议同处于传输层,相同使用相同的网络层,但TCP提供了一种可靠的.面向连接的传输数据服务,它会在两个使用TC ...
- IntelliJ IDEA could not autowire no beans of 'Decoder'
IntelliJ IDEA could not autowire no beans of 'Decoder' 学习了:http://blog.csdn.net/u012453843/article/ ...
- WCF 无法激活服务,由于它不支持 ASP.NET 兼容性。已为此应用程序启用了 ASP.NET 兼容性
作者:jiankunking 出处:http://blog.csdn.net/jiankunking 错误信息: 无法激活服务.由于它不支持 ASP.NET 兼容性.已为此应用程序启用了 ASP.NE ...
- oracle 11g sql developer安装后无法使用
oracle11g安装后出现 再去官网单独下来个sql developer安装 sql developer须要jre支持
- JDBC连接mysql增删改查整体代码
第一种比较low:用了statment,没有用preparedstatement.另外,插入时,不灵活,不能调用参数,但是如果直接给函数形参的话就会被SQL注入攻击,所以,最好在sql语句中使用?代表 ...
- 开源TT框架上的日志类
public class Logger { /** * log tag */ private String tagName = "MoGuLogger";// tag name / ...
- MySQL之----在java编程加强知识点
在数据中,建表处理是非经常见且非常有用的方法. 表和表之间的关系有 1:1 1:N N:N 三种方式. 1对1的方式 <span style="font-size:1 ...
- [Android] Android开发优化之——从代码角度进行优化
通常我们写程序,都是在项目计划的压力下完成的,此时完成的代码可以完成具体业务逻辑,但是性能不一定是最优化的.一般来说,优秀的程序员在写完代码之后都会不断的对代码进行重构.重构的好处有很多,其中一点,就 ...