中易网

hdu 1875 WA 检查不出来...求助!

答案:1  悬赏:0  
解决时间 2021-02-28 08:45
http://acm.hdu.edu.cn/showproblem.php?pid=1875

#include
#include
#include
int a[101];
struct ROAD
{
int num1,num2;
double len;
}road[5051];
int cmp(const void *a,const void *b)
{
return (*(struct ROAD *)a).len - (*(struct ROAD *)b).len;
}
double combine(int x,int y,double len)
{
while(x!=a[x])
x=a[x];
while(y!=a[y])
y=a[y];
if(x==y)return 0;
a[y]=x;
return len*100;
}
int main()
{
int t,n,i,j,m,b[101][2],d;
double sum;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
a[i]=i;
for(i=1;i<=n;i++)
scanf("%d%d",&b[i][0],&b[i][1]);
for(d=0,i=1;i {
for(j=i+1;j<=n;j++)
{
road[d].num1=i;
road[d].num2=j;
road[d].len=sqrt(pow((b[i][0]-b[j][0]),2)+pow((b[i][1]-b[j][1]),2));
d++;
}
}
qsort(road,d,sizeof(road[0]),cmp);
for(sum=0,i=0;i {
if(road[i].len>=10&&road[i].len<=1000)
{
sum+=combine(road[i].num1,road[i].num2,road[i].len);
}
}
for(d=0,i=1;i<=n;i++)
{
if(a[i]==i)d++;
}
if(d>1)printf("oh!\n");
else printf("%.1lf\n",sum);
}
}
麻烦了,先谢谢~

int cmp(const void *a,const void *b)改成double cmp(const void *a,const void *b)了
但还是超时。为什么呢?怎么改呀?
最佳答案
楼主排序法则写的不对。。
排序法则不能返回 浮点数。。。
如果你用返回int型会被强制转换。。
没用过C语言的qsort函数 所以不会改。。
我用C++的sort函数排了下序 就过了。。
楼看着自己改改把。。。
AC code
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#include
#include
#include
using namespace std;
int a[101];
struct ROAD
{
int num1,num2;
double len;
}road[5051];
int cmp(struct ROAD a,struct ROAD b)
{
return a.len }
double combine(int x,int y,double len)
{
while(x!=a[x])
x=a[x];
while(y!=a[y])
y=a[y];
if(x==y)return 0;
a[y]=x;
return len*100;
}
int main()
{
int t,n,i,j,b[101][2],d;
double sum;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
a[i]=i;
for(i=1;i<=n;i++)
scanf("%d%d",&b[i][0],&b[i][1]);
for(d=0,i=1;i {
for(j=i+1;j<=n;j++)
{
road[d].num1=i;
road[d].num2=j;
road[d].len=sqrt(pow((b[i][0]-b[j][0]),2)+pow((b[i][1]-b[j][1]),2));
d++;
}
}
sort(road,road+d,cmp);
for(sum=0,i=0;i {
if(road[i].len>=10&&road[i].len<=1000)
{
sum+=combine(road[i].num1,road[i].num2,road[i].len);
}
}
for(d=0,i=1;i<=n;i++)
{
if(a[i]==i)d++;
}
if(d>1)printf("oh!\n");
else printf("%.1lf\n",sum);
}
return 0;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
BBC VOA电台是哪个频道??
今天晚上去爬泰山,人多吗?
倒桩,倒进乙库时车子左边比较窄我要怎么打方
(yu)走的意思是那个字
我公司是做酸奶的, qq群名字不知道取啥好,
刚办了网银,要用U盾安装证书,为啥U盾插电脑
没有甲醛检测仪,手机怎样测试
骐达自动挡熄火要踩刹车吗
电脑开机出现 can not find script file 窗口
桥梁施工便道在工程量清单中已有,还需要计量
我与小动物的故事
美国耐克公司为什么要把鞋抬到那么贵么,是因
说说考了心理咨询师三级有什么用处
如果雷保罗和詹姆斯负责外线,霍华德和诺维斯
爱す和爱する有什么区别?
推荐资讯
石泉是什么地方?
南枣的价格多少啊
有没有男人穿丁字裤的 我老婆硬要我穿 ,郁闷
哥想用PROE画个钻石怎样画呀
都昌街道综治维稳中心在什么地方啊,我要过去
怎样判断iphone7是否有噪音
广东省古筝考级和国内古筝考级是否一样?哪个
泉羽饭店地址在什么地方,想过去办事
潍坊三二连读高职有哪些学校
河南省安阳市豫北园林公司地址在哪,我要去那
上世纪五十年代的农业生产合作社是如何记工分
索尼suf143a2tt型号电脑,在京东新买的,是wi
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?