hdu 1875 畅通工程再续(最小生成树,基础)
让人郁闷的题目,wa到死了,必须要把判断10.0和1000.0的条件放到prim函数外面去。如代码所放。。。。
正确的(放在prim外):
//2个小岛之间的距离不能小于10米,也不能大于1000米,不能无视! #define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std; #define M 110
double mat[M][M]; struct tt
{
double x,y;
}dian[M]; double prim(int n,int sta)
{
double sum=0.0,dis[M];
int mark[M],i,j;
for(i=;i<n;i++)
{
dis[i]=mat[sta][i];
mark[i]=;
}
mark[sta]=;
for(i=;i<n;i++)
{
double minn=999999.0;
int flag=-;
for(j=;j<n;j++)
{
if(minn>dis[j]&&mark[j]==)
{
flag=j;
minn=dis[j];
}
}
if(flag==-)
return -1.0;
else
{
mark[flag]=;
sum+=dis[flag];
for(j=;j<n;j++)
{
if(dis[j]>mat[flag][j])
dis[j]=mat[flag][j];
}
}
}
return sum;
} int main()
{
int t,i,j,n;
double ans,a;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=;i<n;i++)
for(j=;j<n;j++)
mat[i][j]=999999.0;
for(i=;i<n;i++)
{
scanf("%lf%lf",&dian[i].x,&dian[i].y);
for(j=;j<i;j++)
{
a=sqrt((dian[i].x-dian[j].x)*(dian[i].x-dian[j].x)+(dian[i].y-dian[j].y)*(dian[i].y-dian[j].y));
if(a>=10.0&&a<=1000.0)//原来要把判断放在prim函数的外面啊,,,,
mat[i][j]=mat[j][i]=a;
}
}
ans=prim(n,);
if(ans<)
printf("oh!\n");
else
printf("%.1lf\n",ans*); }
return ;
}
错误的(放在了prim里):
//2个小岛之间的距离不能小于10米,也不能大于1000米,不能无视! #define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std; #define M 110
double mat[M][M]; struct tt
{
double x,y;
}dian[M]; double prim(int n,int sta)
{
double sum=0.0,dis[M];
int mark[M],i,j;
for(i=;i<n;i++)
{
dis[i]=mat[sta][i];
mark[i]=;
}
mark[sta]=;
for(i=;i<n;i++)
{
double minn=999999.0;
int flag=-;
for(j=;j<n;j++)
{
if(minn>dis[j]&&mark[j]==&&dis[j]>=10.0&&dis[j]<=1000.0)//放在prim里面是wa的,虽然我不知道为什么
{
flag=j;
minn=dis[j];
}
}
if(flag==-)
return -1.0;
else
{
mark[flag]=;
sum+=dis[flag];
for(j=;j<n;j++)
{
if(dis[j]>mat[flag][j])
dis[j]=mat[flag][j];
}
}
}
return sum;
} int main()
{
int t,i,j,n;
double ans,a;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=;i<n;i++)
for(j=;j<n;j++)
mat[i][j]=999999.0;
for(i=;i<n;i++)
{
scanf("%lf%lf",&dian[i].x,&dian[i].y);
for(j=;j<i;j++)
{
a=sqrt((dian[i].x-dian[j].x)*(dian[i].x-dian[j].x)+(dian[i].y-dian[j].y)*(dian[i].y-dian[j].y));
mat[i][j]=mat[j][i]=a;
}
}
ans=prim(n,);
if(ans<)
printf("oh!\n");
else
printf("%.1lf\n",ans*); }
return ;
}
错误的!
求知情人告诉我为什么放在里面就不行?
hdu 1875 畅通工程再续(最小生成树,基础)的更多相关文章
- HDU 1875 畅通工程再续 (最小生成树)
畅通工程再续 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- (step6.1.3)hdu 1875(畅通工程再续——最小生成树)
题目大意:本题是中文题,可以直接在OJ上看 解题思路:最小生成树 1)本题的关键在于把二维的点转化成一维的点 for (i = 0; i < n; ++i) { scanf("%d%d ...
- hdu 1875 畅通工程再续(prim方法求得最小生成树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1875 /************************************************* ...
- HDU 1875 畅通工程再续 (prim最小生成树)
B - 畅通工程再续 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit S ...
- HDU 1875 畅通工程再续 (最小生成树)
畅通工程再续 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/M Description 相信大家都听说一个"百岛湖&q ...
- HDU 1875 畅通工程再续(kruskal)
畅通工程再续 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 1875 畅通工程再续 (Prim)
题目链接:HDU 1875 Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现 ...
- HDU - 1875 畅通工程再续【最小生成树】
Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖 ...
- HDU - 1875 畅通工程再续(最小生成树)
d.c个小岛,通过建立桥,使其全部可达.求所有的桥的最小长度和. s.最小生成树,数据改成double就行了 c.Prim算法:cost[a][b]和cost[b][a]都得赋值. /* Prim算法 ...
随机推荐
- NFS网络操作系统介绍以及相关应用
1. NFS服务简介 NFS是Network File System 的缩写,中文名称为网络文件系统,由Sun公司开发,功能是通过网络让不同的机器.不同的操作能够彼此分享数据,让应用程序在客户端通过网 ...
- Selenium定位元素
Commands (命令) Action对当前状态进行操作失败时,停止测试 Assertion校验是否有产生正确的值 Element Locators指定HTML中的某元素 Patterns用于模式匹 ...
- 12.iscsi-target
server: 环境:rhel7.2 软件包:targetcli-2.1.fb41-3.el7.noarch,selinux-policy-targeted-3.13.1-60.el7.noarch ...
- Android:WebView中对图片注册上下文菜单
前言 今天一朋友问我一个问题,就是如何在WebView控件中的图片增加上下文菜单,以便增加保存图片等功能.今天就给他简单做了一个演示Demo,现写下来,给有相同问题的朋友提供些许思路吧. 概要实现 其 ...
- Java对象校验框架之Oval
只要有接口,就会有参数的校验,目前开源的校验框架已经非常多了,不过不得不提一下Oval.OVal 是一个可扩展的Java对象数据验证框架,验证的规则可以通过配置文件.Annotation.POJO ...
- openerp模块收藏 移除下拉选择列表中的“创建并编辑”链接(转载)
移除下拉选择列表中的“创建并编辑”链接 原文:http://shine-it.net/index.php/topic,5990.0.html 有时希望下拉列表中列出的项是与主表某个字段关联的,用户只能 ...
- useradd命令详解
功能说明:建立用户帐号.语 法:useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g ...
- mysql 连接语句
在 SELECT 语句中,如果 FROM 子句引用了多个表源或视图,可以使用 JOIN 指示指定的联接操作应在指定的表源或视图之间执行. 一.交叉联接:CROSS JOIN 交叉联接将执行一个叉积(迪 ...
- 【Go】 格式处理
格式化字符串 在golang里面获取时间戳并不难.只要加载time包.time.Now().Unix() fmt.Sprintf("%d",int64),自此,go语言的int转换 ...
- Java 8 VM GC Tunning Guide Charter 6
第六章 并行GC The Parallel Collector The parallel collector (also referred to here as the throughput coll ...