zoukankan      html  css  js  c++  java
  • poj 3268(spfa)

    http://poj.org/problem?id=3268

    对于这道题,我想说的就是日了狗了,什么鬼,定义的一个数值的前后顺序不同,一个就TLE,一个就A,还16MS。

    感觉人生观都奔溃了,果然,题目做多了总会见到鬼的!!!!!!

    心累,不想写这个题了。

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <queue>
     4 #include <iostream>
     5 #define inf 0x3f
     6 #define Max1 1010
     7 #define Max2 100010
     8 
     9 using namespace std;
    10 int m,n,x;
    11 int mark[Max1];
    12 int next[Max1];
    13 int u[Max2];                       //把13和14行交换一下,你得到了结果会完全不同。。
    14 int v[Max2];
    15 int w[Max2];
    16 int a[Max2],b[Max2],c[Max2];
    17 int dist[Max1];
    18 int ans[Max1];
    19 bool vis[Max1];
    20 
    21 
    22 queue <int >s;
    23 void init()
    24 {
    25     memset( vis,false,sizeof(vis));
    26     while( !s.empty()) s.pop();
    27     memset(dist,inf,sizeof( dist ));
    28     dist[x]=0;
    29     for(int i=1;i<=n;i++)
    30     mark[i]=-1;
    31 }
    32 
    33 void spfa()
    34 {
    35     s.push( x );
    36     vis[ x ] = true ;
    37     while( !s.empty() )
    38     {
    39         int tmp = s.front();
    40         s.pop();
    41         vis[ tmp ] = false;
    42         for(int i = mark[ tmp ] ; i != -1 ; i = next[ i ] )
    43         {
    44             if( dist[ tmp ] + w[ i ] < dist[ v[ i ] ])
    45             {
    46                 dist[ v[ i ] ] = dist[ tmp ] + w[ i ];
    47                 if( !vis[ v[ i ] ] )
    48                 {
    49                     s.push( v[ i ] );
    50                     vis[ v[ i ] ] = true;
    51                 }
    52             }
    53         }
    54     }
    55     for( int i = 1 ; i <= n ; i++ )
    56         ans[ i ] += dist[ i ];
    57 }
    58 
    59 int main()
    60 {
    61  //   freopen("in.txt","r",stdin);
    62     while(~scanf("%d%d%d",&n,&m,&x))
    63     {
    64         memset( ans , 0 , sizeof( ans ) );
    65         init();
    66         for( int i = 1 ; i <= m ; i++ )
    67         {
    68             scanf( "%d%d%d",&a[ i ],&b[ i ],&c[ i ] );
    69             u[ i ] = a[ i ];
    70             v[ i ] = b[ i ];
    71             w[ i ] = c[ i ];
    72             next[ i ] = mark [ u[ i ] ] ;
    73             mark[ u[ i ] ] = i;
    74         }
    75         spfa();
    76         init();
    77         for( int i = 1 ; i <= m ; i++ )
    78         {
    79             v[ i ] = a[ i ];
    80             u[ i ] = b[ i ];
    81             w[ i ] = c[ i ];
    82             next[ i ] = mark[ u[ i ] ];
    83             mark[ u[ i ] ] = i;
    84         }
    85         spfa();
    86         int Max = ans[1];
    87         for( int i = 2 ; i <= n ; i++ )
    88             if( ans[ i ] > Max ) Max = ans[ i ];
    89         printf("%d
    ",Max);
    90     }
    91     return 0;
    92 }
  • 相关阅读:
    JavaScript访问ab页面定时跳转代码
    http协议相关-待续
    curl发送get和post请求
    Java入门——动态网页jsp(jdk下载和配置环境变量)
    LeetCode:Best Time to Buy and Sell Stock
    LeetCode:Reverse Integer
    LeetCode:Same Tree
    LeetCode:Single Number II
    LeetCode:Single Number
    LeetCode:Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/5737567.html
Copyright © 2011-2022 走看看