• 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);
        }
    }


  • 相关阅读:
    windoww7SP1补丁包
    npm loader:936问题
    selenium键盘输入操作
    Windows 剪贴板的预定义格式
    selenium解决ERROR:ssl_client_socket_impl.cc(962)] handshake failed; returned 1, SSL
    Nodejs安装教程及脚手架
    达梦SQL优化及执行计划解读
    pyautogui函数解析分类
    fastapi全局变量
    与Airtest自动化搭配使用模拟器
  • 原文地址:https://www.cnblogs.com/Open_Source/p/1904962.html
Copyright © 2020-2023  润新知