zoukankan      html  css  js  c++  java
  • 【HDU1162】Eddy's picture(MST基础题)

    很基础的点坐标MST,一不留神就AC了, - - !!

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <cstdio>
     5 #include <cmath>
     6 #include <cctype>
     7 #include <algorithm>
     8 #include <numeric>
     9 #include <limits.h>
    10 
    11 #define typec double
    12 using namespace std;
    13 
    14 const int inf = 0xffff;
    15 const int V = 105;
    16 int vis[V];
    17 typec lowc[V], Map[V][V], point[V][2];
    18 
    19 typec prim (typec cost[][V], int n) {
    20     int i, j, p;
    21     typec minc, res = 0;
    22     memset(vis, 0, sizeof(vis));
    23     vis[0] = 1;
    24     for (i = 1; i < n; ++ i) lowc[i] = cost[0][i];
    25     for (i = 1; i < n; ++ i) {
    26         minc = inf;
    27         p = -1;
    28         for (j = 0 ; j < n; ++ j) {
    29             if (0 == vis[j] && minc > lowc[j]) {
    30                 minc = lowc[j];
    31                 p = j;
    32             }
    33         }
    34         if (inf == minc) return -1;
    35         res += minc;
    36         vis[p] = 1;
    37         for (j = 0 ; j < n; ++ j) {
    38             if (0 == vis[j] && lowc[j] > cost[p][j]) {
    39                 lowc[j] = cost[p][j];
    40             }
    41         }
    42     }
    43     return res;
    44 }
    45 
    46 double cal_dis (double x1, double y1, double x2, double y2) {
    47     return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
    48 }
    49 
    50 int main () {
    51     int n;
    52     while (~scanf("%d", &n)) {
    53 
    54         for (int i = 0 ; i < n; ++ i) {
    55             scanf("%lf %lf", &point[i][0], &point[i][1]);
    56         }
    57 
    58         for (int i = 0 ; i < V; ++ i) {
    59             for (int j = 0; j < V; ++ j) {
    60                 if (i == j) Map[i][j] = 0;
    61                 else Map[i][j] = inf;
    62             }
    63         }
    64 
    65         for (int i = 0; i < n; ++ i) {
    66             for (int j = i + 1; j < n; ++ j) {
    67                 Map[i][j] = Map[j][i] =
    68                     cal_dis(point[i][0], point[i][1], point[j][0], point[j][1]);
    69             }
    70         }
    71 
    72         //cout << prim(Map, n) << endl;
    73         printf("%.2lf
    ", prim(Map, n));
    74     }
    75     return 0;
    76 }
  • 相关阅读:
    康托展开
    Linux Command Line Basics
    hihoCoder 1401 Registration
    C++ 参考网站
    Linux 下的常用工具
    SQL 命令
    GNU MAKE 笔记
    一道基本的计算几何题
    uva 1451 平均值
    bzoj 1826 缓存交换
  • 原文地址:https://www.cnblogs.com/Destiny-Gem/p/3866609.html
Copyright © 2011-2022 走看看