zoukankan      html  css  js  c++  java
  • hdoj1875

    //prim算法
    #include<iostream>
    #include
    <stdio.h>
    #include
    <string.h>
    #include
    <math.h>
    using namespace std;
    int T, C, heap_size;
    double map[100][100];
    double V[100][100];
    pair 
    < doubleint >heap[100];    //first保存距离,second保存岛的编号
    void up(int i)
    {
        
    while (i > 1 && heap[i].first < heap[i / 2].first) {
        swap(heap[i], heap[i 
    / 2]);
        i 
    /= 2;
        }
    }

    void down(int i)
    {
        
    int j = i * 2;
        
    while (j <= heap_size) {
        
    if (j < heap_size && heap[j].first > heap[j + 1].first)
            j
    ++;
        
    if (heap[i].first <= heap[j].first)
            
    break;
        swap(heap[i], heap[j]);
        i 
    = j;
        j 
    *= 2;
        }
    }

    int main()
    {
        scanf(
    "%d"&T);
        
    while (T--) {
        scanf(
    "%d"&C);
        
    double sum = 0;
        heap_size 
    = C - 1;
        
    for (int i = 0; i < C; ++i) {
            scanf(
    "%lf%lf"&V[i][0], &V[i][1]);
            
    for (int j = 0; j < i; ++j) {
            
    double distmp =
                sqrt((V[i][
    0- V[j][0]) * (V[i][0- V[j][0]) +
                 (V[i][
    1- V[j][1]) * (V[i][1- V[j][1]));
            
    if (distmp >= 10 && distmp <= 1000)
                map[i][j] 
    = map[j][i] = distmp;
            
    else
                map[i][j] 
    = map[j][i] = 1000000;
            }
        }
    //init heap
        for (int i = 1; i < C; ++i) {
            heap[i].first 
    = map[0][i];
            heap[i].second 
    = i;
        }
        
    for (int i = C / 2; i; --i)
            down(i);
        
    for (int i = 1; i < C; ++i) {
            
    int u = heap[1].second;
            sum 
    += heap[1].first;
            heap[
    1= heap[heap_size];
            heap_size
    --;
            down(
    1);
            
    for (int j = 1; j <= heap_size; ++j) {
            
    if (heap[j].first > map[u][heap[j].second]) {
                heap[j].first 
    = map[u][heap[j].second];
                up(j);
            }
            }
        }
        
    if (sum > (C - 1* 1000)
            printf(
    "oh!\n");
        
    else
            printf(
    "%.1lf\n", sum * 100);
        }
    }


  • 相关阅读:
    php : Warning: strftime(): It is not safe to rely on the system's timezone settings.
    php : DOM 操作 XML
    php : 基础(3)
    php : 基础(2)
    阿里云物联网平台体验(NetGadgeteer+C#篇)
    阿里云物联网平台体验(树莓派+Nodejs篇)
    阿里云物联网平台体验(树莓派+Python篇)
    【MVP时间】5节课助你破解物联网硬件接入难点
    破解物联网落地困境-阿里云硬件接入最佳实践
    从端到云——工业物联网项目全栈快速开发实践
  • 原文地址:https://www.cnblogs.com/Open_Source/p/1904962.html
Copyright © 2011-2022 走看看