hdu 1875 畅通工程再续

简介: 点击打开链接hdu 1875 /*1思路:最小生成树+prime(模板题)*/#include#include#include#include#includeusing namespace std;#define M...

点击打开链接hdu 1875



/*
1思路:最小生成树+prime(模板题)
*/
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define MAXN 110
#define INF 0xFFFFFFF

int t , c;
double ans;
double lowcost[MAXN];
double G[MAXN][MAXN];
struct Point{
    int x;
    int y;
}p[MAXN];

void init(){
    for(int i = 1 ; i <= c ; i++){
       for(int j = 1 ; j <= c ; j++){
         double tmp_x = (p[i].x-p[j].x)*(p[i].x-p[j].x);
         double tmp_y = (p[i].y-p[j].y)*(p[i].y-p[j].y);
         double tmp =  sqrt(tmp_x + tmp_y);
         if(tmp < 10 || tmp > 1000)
           G[i][j] = INF;
         else
           G[i][j] = tmp;
       }
    }
}

void Prime(){
     int pos;
     double min;
     int vis[MAXN];
     memset(vis , 0 , sizeof(vis));
     init();
     vis[1] = 1;
     ans = 0;
     for(int i = 1 ; i <= c ; i++)     
        lowcost[i] = G[1][i];
     for(int i = 1 ; i <= c ; i++){
        min = INF;
        for(int j = 1 ; j <= c ; j++){
           if(!vis[j] && min > lowcost[j]){
              pos = j;
              min = lowcost[j];
           }
        }
        if(min == INF)
          break;
        ans += min;
        vis[pos] = 1;
        for(int j = 1 ; j <= c ; j++){
           if(!vis[j] && lowcost[j] > G[pos][j])
             lowcost[j] = G[pos][j];
        }
     }
     if(G[1][c] != INF)
       printf("%.1lf\n" , ans*100);
     else
       printf("oh!\n");
}

int main(){
   // freopen("input.txt" , "r" , stdin);
    scanf("%d" , &t);
    while(t--){
       scanf("%d" , &c);
       for(int i = 1 ; i <= c ; i++) 
          scanf("%d%d" , &p[i].x , &p[i].y);
       Prime();
    }
    return 0;
}




目录
相关文章
|
7月前
|
Java 测试技术
HDU-1232-畅通工程(未完待续)
HDU-1232-畅通工程(未完待续)
29 0
|
7月前
|
Java 测试技术
HDU-1233-还是畅通工程
HDU-1233-还是畅通工程
38 0
畅通工程 HDU - 1232
畅通工程 HDU - 1232
79 0
HDU-2897,邂逅明下(巴什博弈)
HDU-2897,邂逅明下(巴什博弈)
|
算法
HDU - 2063: 过山车
HDU - 2063: 过山车
143 0
|
人工智能 测试技术
|
Java 测试技术
HDU 1232 畅通工程
畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 50540    Accepted Submission(s): 26968 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。
1022 0
|
人工智能 Java C++
HDU 3785 寻找大富翁
寻找大富翁 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6716    Accepted Submission(s): 2492 Problem Description 浙江桐乡乌镇共有n个人,请找出该镇上的前m个大富翁.
1098 0