• 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 }
  • 相关阅读:
    不要自称为程序员(转)
    JSON数据格式
    netstat
    win7,ubuntu双系统——重装win7后如何恢复ubuntu引导
    js中setInterval与setTimeout用法
    使用CSS中margin和padding的基础和注意事项
    HTTP协议与HTML表单(再谈GET与POST的区别)
    (转)JAVA AJAX教程第四章—AJAX和MVC的简单结合
    (转)JAVA AJAX教程第三章—AJAX详细讲解
    制作SD卡启动自己编译的uboot.bin
  • 原文地址:https://www.cnblogs.com/corvey/p/4780353.html
Copyright © 2020-2023  润新知