프리픽스의 순서로 [I], 요구 ⼀는 S (R)에 상당하다 -들 [1 - 1]> = X의.
는 S를 포함하는 청구항에 다른 문제가있다 [내가] - S [I - 1] <= 1, S [I] - S [I-1]> = 0.
은 S에 연결된 모든 노드를 슈퍼 원점의 빌드 (S = N + 1 - 1)
차동 구속 시스템 간의 상대적인 관계는 요소만을 규정
가능한 문제의 의미에 따라, 일정한 최종 답변 사이의 상대적 관계는 작은
그래서 최종 답변을해야한다 : DIS [N] - min_dis
#INCLUDE <cstdio>
#INCLUDE <CString을>
#INCLUDE <큐>
#INCLUDE <알고리즘>
사용 스페이스 성병;
인라인 INT의 판독 ()
{
INT의 합 = 0 , p = 1 ;
숯 CH = getchar가 ();
동안 (CH2 < ' 0 ' || CH> ' 9 ' )
{
경우 (CH2 == ' - ' )
(P) = - 1 ;
CH = getchar가 ();
}
동안 (CH2> = ' 0 ' && CH <= ' 9 ' )
{
(합계 * = 10 ) = CH + - ' 0 ' ;
CH = getchar가 ();
}
리턴 합 * P;
}
CONST INT maxn = 30,005 , MAXM = 5005 ;
INT의 N, M, S, CNT;
INT DIS [maxn, 헤드 [maxn];
불리언 힘 [maxn];
구조체 에지
{
INT의 NXT에 웨이;
} E [maxn * 5 ];
보이드 추가 ( INT의 X, INT의 Y, INT의 z)
{
E [ ++ CNT] = .nxt 헤드 [X];
E [CNT] .TO = Y;
E [CNT] .wei = Z;
헤드 [X] = CNT;
}
공극 spfa ( INT X)
{
큐 < INT > Q 단계;
q.push (X);
위한 ( int로 I = 0 ; I는 <= N + 1 ; I ++는 )
DIS [I] =1E9;
DIS [S]
{= 0 ;
힘 [들] = 참 ;
반면 (! q.empty ())
{
INT O = q.front ();
q.pop ();
힘 [0]는 = 거짓 ;
대 ( int로 , I, I = 헤드 [0] I = E [I] .nxt)
{
INT의 V = E [I] .TO;
경우 (DIS [V]> DIS [0] + E [I] .wei)
{
DIS [V] = DIS [0] + E [I] .wei;
만약 (! 힘 [V])
q.push (V);
힘 [V] = 참 ;
}
}
}
}
}
INT ) (주
{
N =) (읽기, m = 판독 ();
S = N + 1 ;
memset 함수 (머리 - 1 , 를 sizeof (헤드));
위한 ( int로 I = 0 ; I <= N은, 내가 ++ )
추가 (S, I, 0 );
int로 A, B, C를;
위한 ( int로 I = 1 ; I <= m; 내가 ++ )
{ = 읽기 (), B = 판독 (), C = 판독 ();
추가 (B, A - 1 - c);
}
에 대해 ( int로 I = 1 ; i가 N = <; 내가 ++ )
{
추가는 (i - 1 , I, 1 );
추가 (I, I - 1 , 0 );
}
spfa (S);
INT ANS = 1E9;
위한 ( int로 I = 0 ; I ++는, 난 <= N )
ANS =분 (ANS, DIS [I]);
의 printf ( " %의 D " , DIS [N] - ANS);
반환 0 ;
}