• HDOJ 1879 Prim实现


    调试中遇到的困难主要在于building队列的维护。不能简单地将新增edge加入queue,需要对其方向进行处理。

     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <queue>
     4 #include <cstring>
     5 
     6 using namespace std;
     7 
     8 #define N 100
     9 
    10 struct road{
    11     int begin;
    12     int end;
    13     int value;
    14 };
    15 
    16 bool operator < (road a, road b){
    17     return a.value > b.value;
    18 }
    19 
    20 int main(){
    21     int n;
    22     while (scanf("%d", &n), n != 0){
    23         int num = n*(n-1)/2;
    24         int total_value = 0;
    25         int count = 1;
    26         road roads[num];
    27         priority_queue<road> roads_building;
    28         bool roads_outqueue[num];
    29         bool linked[n];
    30         memset(roads_outqueue, true, sizeof(roads_outqueue));
    31         memset(linked, false, sizeof(linked));
    32         for (int i = 0; i < num; i++){
    33             int built;
    34             scanf("%d %d %d %d", &roads[i].begin, &roads[i].end, &roads[i].value, &built);
    35             if (built == 1)
    36                 roads[i].value = 0;
    37         }
    38         for (int i = 0; i < num; i++)
    39             if (roads[i].begin == 1){
    40                 roads_building.push(roads[i]);
    41                 roads_outqueue[i] = false;
    42             }
    43         linked[0] = true;
    44         while (count < n){
    45             road top = roads_building.top();
    46             roads_building.pop();
    47             if (not linked[top.end - 1]){
    48                 linked[top.end - 1] = true;
    49                 total_value += top.value;
    50                 count += 1;
    51                 for (int i = 0; i < num; i++)
    52                     if (roads_outqueue[i]){
    53                         if (roads[i].begin == top.end){
    54                             roads_building.push(roads[i]);
    55                             roads_outqueue[i] = false;
    56                         }
    57                         else if (roads[i].end == top.end){
    58                             road temp;
    59                             temp.begin = roads[i].end;
    60                             temp.end = roads[i].begin;
    61                             temp.value = roads[i].value;
    62                             roads_building.push(temp);
    63                             roads_outqueue[i] = false;
    64                         }
    65                     }
    66             }
    67         }
    68         printf("%d
    ", total_value);
    69     }
    70     return 0;
    71 }
  • 相关阅读:
    spring ConfigurationProperties 注解
    MySQL安装
    Linux虚机密码破解
    spring cloud zuul 配置(Robbin 和 熔断)
    Oracel官网下载各类版本的JDK
    spring @Configuration
    IDEA debug
    Spring Boot @ControllerAdvice+@ExceptionHandler处理controller异常
    redis-day1
    Mysql进阶-day3
  • 原文地址:https://www.cnblogs.com/neopolitan/p/7872291.html
Copyright © 2020-2023  润新知