• POJ 3268 Silver Cow Party


    题意:给定顶点个数,边的个数,目的地,求顶点到边的往返最大距离

    解题思路:目的地到顶点的是标准的Dijkstra,顶点到目的地的只需要把矩阵转置一下就OKay了

     1 #include <iostream>
     2 #include <cstring>
     3 #include <algorithm>
     4 #define MAXVERTEXNUM 1005
     5 #define INF 1000000
     6 using namespace std;
     7 
     8 int Nv, Ne, Des;
     9 int MGraph[MAXVERTEXNUM][MAXVERTEXNUM];
    10 int dist1[MAXVERTEXNUM], dist2[MAXVERTEXNUM];
    11 
    12 void Dijkstra()
    13 {
    14     int collected[MAXVERTEXNUM];
    15     memset(collected, 0, sizeof(collected));
    16     collected[Des] = 1;
    17     dist1[Des] = 0;
    18 
    19     for (int i = 1; i <= Nv; ++i)
    20     {
    21         if (MGraph[Des][i] != INF)
    22             dist1[i] = MGraph[Des][i];
    23         else
    24             dist1[i] = INF;
    25     }
    26 
    27     for (int i = 2; i <= Nv; ++i)
    28     {
    29         int minDis = INF, num;
    30         for (int j = 1; j <= Nv; ++j)
    31             if (!collected[j] && minDis > dist1[j])
    32             {
    33                 minDis = dist1[j];
    34                 num = j;
    35             }
    36 
    37         collected[num] = 1;
    38         dist1[num] = minDis;
    39 
    40         for (int j = 1; j <= Nv; ++j)
    41             if (!collected[j] && dist1[j] > dist1[num] + MGraph[num][j])
    42                 dist1[j] = dist1[num] + MGraph[num][j];
    43     }
    44 }
    45 
    46 void T()
    47 {
    48     for (int i = 1; i <= Nv; ++i)
    49         for (int j = 1; j <= i; ++j)
    50             swap(MGraph[i][j], MGraph[j][i]);
    51 }
    52 
    53 int main()
    54 {
    55     ios::sync_with_stdio(false);
    56 
    57     cin >> Nv >> Ne >> Des;
    58 
    59     for (int i = 1; i <= Nv; ++i)
    60         for (int j = 1; j <= Nv; ++j)
    61             if (i != j)
    62                 MGraph[i][j] = INF;
    63             else
    64                 MGraph[i][j] = 0;
    65 
    66     for (int i = 1; i <= Ne; ++i)
    67     {
    68         int V1, V2, Edge;
    69         cin >> V1 >> V2 >> Edge;
    70         MGraph[V1][V2] = Edge;
    71     }
    72 
    73     Dijkstra();
    74     for (int i = 1; i <= Nv; ++i)
    75         dist2[i] = dist1[i];
    76     T();
    77     Dijkstra();
    78 
    79     int maxDis = 0;
    80     for (int i = 1; i <= Nv; ++i)
    81         if (i != Des)
    82         {
    83             int temp = 0;
    84             temp += dist1[i];
    85             temp += dist2[i];
    86             if (temp > maxDis)
    87                 maxDis = temp;
    88         }
    89 
    90     cout << maxDis << endl;
    91 
    92     return 0;
    93 }
  • 相关阅读:
    HTML常用标签(自用,可能不严谨,勿怪)
    Nginx负载均衡和反向代理设置
    Django的列表反序
    Python装饰器通用样式
    WCF、Web API、WCF REST、Web Service的区别
    C++11 标准新特性: 右值引用与转移语义
    在windows下vs使用pthread
    部分浏览器记住密码后可能会带来的问题
    SQL Server、 My SQL、PG Sql、Oracle、 Access 不同数据库sql差异
    sql中select语句的逻辑执行顺序
  • 原文地址:https://www.cnblogs.com/ducklu/p/9226524.html
Copyright © 2020-2023  润新知