P2294は、[HNOI2005]狡猾なビジネスマン(差動制約)

P2294 [HNOI2005]狡猾なビジネスマン

各$(X、Y、W)$のために、偶数(W X-1、Y)$エッジ、(Y、X-1、-w)$は、$ yは$の$よりか月前前利益を表しますX-1の大きなゲインの$ W $の$ヶ月

そのような被験体は、図1の変換があるか否かを尋ねられた非ゼロリング存在します

だから我々はうまく肯定リング(最長経路)と負のループ(最短)を探してください


実際には、あなたは同等で、正と負のループリングを見つけます

だから、あなただけの1行に1つを必要とします

書式#include <iostreamの> 
の#include <cstdioを> 
する#include <CStringの>
 使用して 名前空間はstd;
#define N 105
 INT T、N、M、[N] [N]、F1 [N]、F2 [N]、INF。
BOOL VIS1 [N]、VIS2 [N]、[OK]。
ボイド spfa1(INT X){
     場合(VIS1 [X])OK = 1 もし(OK)のリターン; 
    VIS1 [X] = 1 以下のためのint型私は= 0 ; I <= N && OK!++ I)
         の場合(![X] [i]を= INF)
             の場合、F1 [X] +(F1 [I]>[X] [i])と
                F1 [I] = F1 [X] + [X] [i]は、spfa1(I)。
    VIS1 [X] = 0 ; 
} 
ボイド spfa2(INT X){
     場合(VIS2 [X])OK = 1 もし(OK)のリターン; 
    VIS2 [X] = 1 以下のためのint型私は= 0 ++; [OK]を私は<= N &&!i)が
         あれば([X] [i]を=!infファイル)
             の場合(F2 [i]は、<F2 [X] + [I] [X] )
                F2 [I] = F2 [X] + [X] [i]は、spfa2(I)。
    VIS2 [X] =0 ; 
} 
int型のmain(){ 
    scanf関数(" %のD "、&T)。
    一方、(T-- ){ 
        memsetの(、127はsizeof(a)参照)。INF = [ 0 ] [ 0 ]。
        memsetの(F1、127はsizeof (F1))。
        memset(F2、128はsizeof (F2))。
        scanf関数(" %d個の%のD "、&​​N、&M)。OK = 0 ; F1 [ 0 ] = F2 [ 0 ] = 0 以下のためのint型 I = 1、U、V、W; I <= M; ++ I){ 
            scanf関数(" %D%D%D "、&​​U&V、およびW)
            [U - 1 ] [V] = Wは、
            [V] [U - 1 ] = - W。
        } 
        のためにint型私= 0 ++;;私は= <nでspfa1(I)、spfa2(I)は、i); //自选一种
        プット(OK" "" " ); 
    } 戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/kafuuchino/p/11719088.html