题目链接:https://cn.vjudge.net/contest/66965#problem/N

注释:这道题需要用krustra,用prim的话可能会超时。并且在计算距离的时候要尽量减少步骤,具体注意事项在代码中说吧。

AC代码:

#include<iostream>
#include<string>
#include<cstring>
#include<iomanip>
#include<cmath>
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
# define inf 0x3f3f3f3f
# define maxn 5000
int father[maxn];
struct Point
{
int x,y;
} q[maxn];
struct Edge
{
int fr;
int to;
double cost;
} edge[maxn];
double cal(int t1,int t2)
{
double s1=(q[t1].x-q[t2].x);
double s2=(q[t1].y-q[t2].y);
return (s1*s1+s2*s2);//不要直接计算sqrt,在累积和的时候计算
}
bool cmp(Edge t1,Edge t2)
{
return t1.cost<t2.cost;
}
int Find(int t)
{
return t==father[t]? t:father[t]=Find(father[t]);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%d%d",&q[i].x,&q[i].y);
father[i]=i;
}
int num=0;
for(int i=1; i<=n; i++)
{
for(int j=i+1; j<=n; j++)
{
double temp=cal(i,j);
if(temp<100.0||temp>1000000.0)continue;
edge[++num].fr=i;
edge[num].to=j;
edge[num].cost=temp;
}
}
// cout<<num<<endl;
sort(edge+1,edge+num+1,cmp);
double sum=0;
int ans=0;
for(int i=1; i<=num; i++)
{
int t1=Find(edge[i].fr);
int t2=Find(edge[i].to);
if(t1!=t2)
{
father[t1]=t2;
sum+=sqrt(edge[i].cost);
ans++;
}
if(ans==n-1)break;
}
if(ans<n-1)printf("oh!\n");
else printf("%.1lf\n",sum*100.0);
}
return 0;
}

最新文章

  1. Ajax跨域Post方法调用Web Api(NuGet配置的环境)
  2. 60个有用CSS代码片段
  3. NetworkComms V3 之支持TCP连接和UDP连接
  4. 判断i在字符串中出现的次数(2016.1.12P141-1)
  5. TKinter之窗口美化 窗口大小、图标等
  6. [OC Foundation框架 - 6] NSMutableString
  7. windows7下硬盘安装ubuntu14.04
  8. C# 右键菜单 contextMenuStrip
  9. mysql基础-- 一条请求执行多条SQL语句
  10. Dynamics CRM2016 新功能之从CRM APP中导出数据至EXCEL
  11. Django入门基础详解
  12. Python取整及保留小数小结
  13. s2 Docker环境的快速搭建方法
  14. BUG管理工具——Mantis安装配置
  15. JavaScript对象之深度克隆
  16. dubbo发布和引用服务
  17. 在hue中使用hive
  18. 梦殇 chapter two
  19. C#中的事件(event)处理机制
  20. SuperSocket.WebSocket.WebSocketServer.Setup无法启动

热门文章

  1. Windows下CURL扩展无效之终极解决办法。
  2. [cdqzds] Challenge4
  3. shell的sed命令
  4. [BZOJ4556][Tjoi2016&amp;Heoi2016]字符串 后缀数组+主席树
  5. c++11 可变参数模板函数
  6. 【集训】练习题 uria
  7. shell实践(一)---判断远程服务器中文件是否存在
  8. Ants on tree
  9. Kerberos无约束委派的攻击和防御
  10. 主角场景Shader效果:光影