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 }
  • 相关阅读:
    #斯坦纳树#洛谷 4294 [WC2008]游览计划
    #位运算#CF959E Mahmoud and Ehab and the xor-MST
    #构造#洛谷 6470 [COCI2008-2009#6]CUSKIJA
    #dp#洛谷 6855 「EZEC-4.5」走方格
    #容斥,排列组合#U138404 选数字
    #线段树合并#JZOJ 5365 通信
    #树上启发式合并,trie#JZOJ 5363 生命之树
    #循环节,gcd#JZOJ 5362 密码
    #树状数组、dp#JZOJ 5361 捕老鼠
    #dp#JZOJ 1281 旅行
  • 原文地址:https://www.cnblogs.com/corvey/p/4780353.html
Copyright © 2011-2022 走看看