1.最短
- シングルソースの最短
(1〜N)
// SPFA算法
の#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 const int型の N = 15000 ; 構造体扁{ int型のX、Y、D、次。 }。 INT 最後[N]、LEN、D [N]。 INT 一覧[N]、尾、頭、V [N]; 扁[ 210000 ]。 ボイドイン(int型のx、int型の Y、int型d)は { lenの ++ 。 [LEN] .X = X; [LEN] .Y = Y; [LEN] .D = D。 [LEN] .next = 最後[X]。 最後[X] = LEN。 } INTのmain() { int型N、M、X、Y、C、ST、ED。 scanf関数(" %d個の%のD "、&N、&M)。// 点、边 ため(int型 I = 1 iは++; I <= M {) のscanf(" %D%D%D "、およびX&Y、&C)。 イン(X、Y、C)。 イン(Y、X、C)。 } のために(int型 i = 1 ; iがn = <; iは++)Dは[I] = 9999999999 。 ST = 1 ; ED = N。 dは[ST]は = 0 ; V [ST] = 1 。 リスト[ 1 ] = ST;ヘッド= 1 ;尾= 2 ; 一方、(!ヘッド= 尾){ X = リスト[ヘッド]。 用(int型 ; kはkは= K =最後[X] {.next [K])を 、Yは = [K]・Yと、 もし(D [Y]> D [X] + [K] .D){ D [Y] = D [X] + [K] .D。 もし(V [Y] == 0 ){ V [Y] == 1 。 リスト[尾] = Y。 尾 ++ ; もし(尾== N + 1)尾= 1 。 } } } リスト[ヘッド] = 0 ; ヘッド ++ ; もし(ヘッド== N + 1)ヘッド= 1 。 V [X] = 0 ; } のprintf(" %dの" 、D [N])。 }
2.高速パワー
インラインLLのMUL(-1,11,11-のB、LL MOD){ LL ANS = 1 。 一方、(b)は、{ もし、(B&1)ANS = ANS *%のP。= A *%pを。B >> = 1 。 } 戻り ANS%のMODと、 }
3.ユークリッドを拡大
ボイド ex_gcd(int型、int型 B、INT&X、INT&Y){ 場合(B)ex_gcd(B、%のB、Y、X)、Y - =(/ B)* X。 そうでなければ、X = 1、Y = 0 。 }