zoukankan      html  css  js  c++  java
  • 【HDU3371】Connect the Cities(MST基础题)

    注意输入的数据分别是做什么的就好。还有,以下代码用C++交可以过,而且是500+ms,但是用g++就会TLE,很奇怪。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <cmath>
     6 #include <cctype>
     7 #include <algorithm>
     8 #include <numeric>
     9 #include <limits.h>
    10 
    11 #define typec int
    12 using namespace std;
    13 
    14 const typec inf = 0xffff;
    15 const int V = 505;
    16 int vis[V]; typec lowc[V];
    17 int Map[V][V];
    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 
    47 int main () {
    48     int n, road_n, union_n, T;
    49     scanf("%d", &T);
    50     while (T--) {
    51         scanf("%d%d%d", &n, &road_n, &union_n);
    52         //cout << "road_n : "  << road_n << endl;
    53         for (int i = 0; i < V; ++ i) {
    54             for (int j = 0; j < V; ++ j) {
    55                 if (i == j) Map[i][j] = 0;
    56                 else Map[i][j] = inf;
    57             }
    58         }
    59 
    60         for (int i = 0; i < road_n; ++ i) {
    61             int x, y, w;
    62             scanf("%d%d%d", &x, &y, &w);
    63             Map[x - 1][y - 1] = Map[y - 1][x - 1] = min(Map[x - 1][y - 1], w);
    64 
    65         }
    66         /*
    67         for (int i = 0 ; i < n; ++ i) {
    68             for (int j = 0; j < n; ++ j) {
    69                 cout << Map[i][j] << "	";
    70             }
    71             cout << endl;
    72         }
    73         */
    74         for (int i = 0; i < union_n; ++ i) {
    75             int xx, xx_n, last;
    76             scanf("%d", &xx_n);
    77             for (int j = 0; j < xx_n; ++ j) {
    78                 scanf("%d", &xx);
    79                 if (!j) {
    80                     last = xx;
    81                     continue;
    82                 } else {
    83                     Map[xx - 1][last - 1] = Map[last - 1][xx - 1] = 0;
    84                     last = xx;
    85                 }
    86             }
    87         }
    88 
    89         printf("%d
    ", prim(Map, n));
    90     }
    91     return 0;
    92 }
  • 相关阅读:
    Golang调用windows下的dll动态库中的函数
    Golang 编译成 DLL 文件
    go 通过nginx代理后获取用户ip
    idea教程--Maven 骨架介绍
    idea教程--快速插入依赖
    Java开发名词解释
    Android Studio安装
    Java基础--Eclipse关联Java源码
    【排序基础】3、随机生成排序算法 测试用例
    【排序基础】2、使用模板(泛型)编写选择排序算法
  • 原文地址:https://www.cnblogs.com/Destiny-Gem/p/3866047.html
Copyright © 2011-2022 走看看