算法-九度oj 题目1144:Freckles,不能通过,为什么超时间?

问题描述

九度oj 题目1144:Freckles,不能通过,为什么超时间?

#include
#include
#include
using namespace std;
const int maxn = 5000;
const double INF = 1000000000;
bool vis[maxn] = {false};
double x[maxn],y[maxn];
int n ;
int father[maxn];
struct Node{
double u,v;
double cost;
}edge[maxn];
int index;
bool cmp(Node a,Node b){
return a.cost<b.cost;
}
void init(){

for(int i = 0;i < n;i++){
for(int j = 0;j <= i;j++){
edge[index].u = i;
edge[index].v = j;
edge[index++].cost = sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
}
}

int findfather(int x){
while(x!=father[x]){
x = father[x];
}
return x;
}

double Krustral(){
double ans = 0,num = 0;
for(int i = 0; i< n;i++){
father[i] = i;
}
for(int i = 0; i < index;i++){
int faa = findfather(edge[i].u);
int fab = findfather(edge[i].v);
if(faa!=fab){
father[faa] = fab;
ans+=edge[i].cost;
num++;
if(index-1==num) break;
}
}
return ans;
}

int main(){
while(scanf("%d",&n)!=EOF&&n!=0){
index = 0;
fill(x,x+maxn,0);
fill(y,y+maxn,0);
for(int i = 0;i < n;i++){
scanf("%lf %lf",&x[i],&y[i]);
}
init();
sort(edge,edge+index,cmp);
double a = Krustral();
printf("%.2lf
",a);
}
return 0;
}


九度OJ:http://ac.jobdu.com/problem.php?pid=1144

解决方案

可能是你算法不优化

参考:http://www.ithao123.cn/content-5538295.html

解决方案二:

http://blog.csdn.net/binyuapple/article/details/18942861

解决方案三:

http://www.fx114.net/qa-54-214088.aspx

解决方案四:

九度oj 题目1144:Freckles

时间: 2024-09-30 18:42:35

算法-九度oj 题目1144:Freckles,不能通过,为什么超时间?的相关文章

九度OJ 题目1510:替换空格

题目1510:替换空格 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1697 解决:436 题目描述: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 输入: 每个输入文件仅包含一组测试样例. 对于每组测试案例,输入一行代表要处理的字符串. 输出: 对应每个测试案例,出经过处理后的字符串. 样例输入: We Are Happy 样例输出: We%20Are%20H

9度oj 题目1001:A+B for Matrices【水题】

题目1001:A+B for Matrices 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:13653 解决:5575 题目描述:     This time, you are supposed to find A+B where A and B are two matrices, and then count the number of zero rows and columns. 输入:     The input consists of several test cases,

9度oj 题目1004:Median【排序水题】

题目1004:Median 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:12541 解决:3434 题目描述:     Given an increasing sequence S of N integers, the median is the number at the middle position. For example, the median of S1={11, 12, 13, 14} is 12, and the median of S2={9, 10, 15, 1

9度oj 题目1006:ZOJ问题【递推】

题目1006:ZOJ问题 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:14782 解决:2482 题目描述: 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下: 1. zoj能AC: 2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或者为空: 3. 若azbjc 能AC,则azbojac也能AC,其中a,b,c为N个'o'或者为空: 输入: 输入包含多组测试用例,每行有一个只包含'z','o','j'三种字符的字符串

9度oj 题目1003:A+B【水题】

题目1003:A+B 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:11463 解决:4841 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开. 现在请计算A+B的结果,并以正常形式输出. 输入: 输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-10^9 < A,B < 10^9). 输出: 请计算A+B的结果,并以正常形式输出,每组数据占一行. 样例输入: -234,567,890 123,456,789 1,

9度oj 题目1000:计算a+b【水题】

题目1000:计算a+b 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:26087 解决:11745 题目描述: 求整数a,b的和. 输入: 测试案例有多行,每行为a,b的值. 输出: 输出多行,对应a+b的结果. 样例输入: 1 2 4 5 6 9 样例输出: 3 9 15 题解:java练习 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner

九度OJ 1015

//判断最后几位是否相同即可 #include<stdio.h> int main() { int a,b,k; while(scanf("%d %d %d",&a,&b,&k)!=EOF){ if(a==0&&b==0) break; int m=a,n=b; int flag=0; while(k--){ int x=m%10; m/=10; int y=n%10; n/=10; if(x!=y){ flag=1; break;

九度OJ 1001

//好久没写C语言了,水题,判断一个矩阵一行或一列中的元素都是0的个数. #include<stdio.h> int x[10][10],y[10][10]; int main() { int a,b; while(scanf("%d %d",&a,&b)!=EOF) { if(a==0||b==0) break; int anum=0,bnum=0,temp; for(int i=0; i<a; i++) for(int j=0; j<b; j

九度题目1364:v字仇杀队

题目1364:v字仇杀队 时间限制:1 秒内存限制:32 兆特殊判题:否提交:392解决:161 题目描述:          最近玄影游侠看了一部非常好看的电影,叫做<v字仇杀队>.下面是这部电影的主角v:          它想说明的一个问题就是,你现在所想的真的是你自己内心所想的吗?还是别人,社会让你这么想的?你要有自己的想法,每个人内心都有自己的准则,你没有必要按照大众的准则去想.          v整整策划了一年炸掉英国政府的大楼来推翻独裁统治,在这期间,v遇到了一个问题:如何使用