zoukankan      html  css  js  c++  java
  • POJ 3268 Silver Cow Party

    题意:

             有N头牛要去X牛的家开party,求这些牛当中来回所需要花的最大时间。

    思路:

             先以X牛为源点进行一次Dijkstra算法,得出各头牛回家所需花费的时间;再把图反向(即矩阵转置),再以X牛为源点进行一次Dijkstra算法,得出各头牛去X牛的家所需花费的时间。两个时间相加对比得出结果。

     

     1 #include <cstdio>
     2 #include <string.h>
     3 const int N = 1100, INF = 0x3f3f3f3f;
     4 int edge[N][N];
     5 void Dijkstra(int* D, int n, int from)
     6 {
     7     int mintag;
     8     bool vis[N] = {0};
     9     vis[from] = true;
    10     memcpy(D, edge[from], 4*N);// 这里不能用sizeof(D), 因为sizeof是在编译时进行,而编译时并不知道D的大小
    11     for(int i=1; i<n; ++i)
    12     {
    13         mintag = from;
    14         for(int j=1; j<=n; ++j)
    15             if(!vis[j] && D[j] < D[mintag])
    16                 mintag = j;
    17         vis[mintag] = true;
    18         for(int j=1; j<=n; ++j)
    19             if(!vis[j] && D[mintag] + edge[mintag][j] < D[j])
    20                 D[j] = D[mintag] + edge[mintag][j];
    21     }
    22 }
    23 int main(void)
    24 {
    25     int Come[N], Back[N];
    26     int n, m, x, from, to, d, MAX;
    27     while(~scanf("%d %d %d", &n, &m, &x))
    28     {
    29         memset(edge, INF, sizeof(edge));
    30         for(int i=0; i<m; ++i)
    31         {
    32             scanf("%d %d %d", &from, &to, &d);
    33             if(d < edge[from][to])
    34                 edge[from][to] = d;
    35         }
    36         Dijkstra(Back, n, x);
    37         for(int i=1; i<=n; ++i)  //生成反向图
    38             for(int j=i+1; j<=n; ++j)
    39                 edge[i][j] ^= edge[j][i], edge[j][i] ^= edge[i][j], edge[i][j] ^= edge[j][i];
    40         Dijkstra(Come, n, x);
    41         MAX = 0;
    42         for(int i=1; i<=n; ++i)
    43         {
    44             d = Come[i] + Back[i];
    45             if(d < INF && d > MAX)
    46                 MAX = d;
    47         }
    48         printf("%d
    ", MAX);
    49     }
    50 }
  • 相关阅读:
    t
    溢出
    https://stackoverflow.com/questions/45591594/fetch-does-not-send-headers
    显示在用户屏幕上的缩略图
    cache buffer
    LZW
    t
    指针悬挂
    使用Linux服务器来通过网络安装和激活Windows 7 —— 一些基本原理
    在C++中如何动态分配一个二维数组
  • 原文地址:https://www.cnblogs.com/corvey/p/4780353.html
Copyright © 2011-2022 走看看