P3376ネットワークフローテンプレート

emmm

タイトルはまた、非常に明らかにされています

トピックリンク:https://www.luogu.com.cn/problem/P3376

 

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
const  int型 MAXN = 200000 + 5 INT最後[MAXN]、NXT [MAXN * 2へ]、[MAXN * 2 ]、WI [MAXN * 2 ]、CNT = - 1 int型の深い[MAXN]。
INT S、T、N、M。
ボイド追加(INT U、INT V、INT W)
{ 
    に[ ++ CNT] = V。
    Wi [CNT] = W。
    NXT [CNT] = 最後[U]。
    最後[U] = CNT。
    リターン; 
} 
ブールBFS()
{ 
    キュー < INT > Q。
    memsetの(深い、0はsizeof (深いです))。
    しばらく(!Q.empty())
        Q.pop(); 
    Q.push(S); 
    深い[S] = 1 実行{
         int型、U = Q.front()。Q.pop();
        以下のためのint型 - ;!I = [U]私は最後の= 1 ;私は= NXT [I])を
             場合(のwi [I]> 0 &&深い== [i]の[へ] 0  
            {
                深い[I]乃至] =深い[U] + 1 
                ([I]に)Q.push。
            } 
    } しばらく(!Q.empty());
    もし(深い[T] == 0戻り 0 ;
    リターン 1 ; 
} 
int型の DFS(INT U、INT DIST)
{ 
    場合(U == T)戻りDIST。
    以下のためにint型私は、最後の= [U];!I = - 1 ;私は= NXT [I])を
         場合(深い==深い[U] + [I]へ] 1 &&のwi [I] =!0
        { 
            int型ジ= ([i]は、分(DIST、WI [I]に)DFS)。
            もし(ジ> 0 
            { 
                のWi [I] = - ;ジ 
                Wi [I ^ 1 ] + = ジ。
                リターン・ディ。
            } 
        } 
    戻り 0 
} 
int型dinic()
{ 
    int型 ANS = 0 一方、(BFS())
        ANS + = DFS(S、100000007 )。
    戻り値は、ANS; 
} 
int型メイン()
{ 
    memsetの(最後に、 - 1はsizeof (最終))。
    memset(NXT、 - 1はsizeof (NXT))。
    CIN >> N >> M >> S >> T。
    以下のためにINT iが= 1 ; I <= M; I ++ 
    { 
        int型、U、V、W。
        CIN >> U >> V >> ワット。
        (U、V、W)を加えます。
        追加(V、U、0 ); 
    } 
    COUT << dinic()。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/wdxxz3274/p/11965443.html