zoukankan      html  css  js  c++  java
  • 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 MVC Ajax 嵌套表单数据的提交
    Spring MVC 过滤静态资源访问
    Spring MVC 页面跳转时传递参数
    IDEA Maven 三层架构 2、运行 springMVC
    IDEA Maven 三层架构 1、基本的Archetype 搭建
    EasyUI DataGrid 基于 Ajax 自定义取值(loadData)
    Spring MVC Ajax 复杂参数的批量传递
    Mybatis Sql片段的应用
    在 Tomcat 8 部署多端口项目
    自动升级的设计思路与实现
  • 原文地址:https://www.cnblogs.com/neopolitan/p/7872291.html
Copyright © 2011-2022 走看看