首页 > 其他分享 >P3376 【模板】网络最大流(EK)

P3376 【模板】网络最大流(EK)

时间:2022-11-04 22:25:54浏览次数:40  
标签:include dist EK long P3376 return now 模板 dq

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const long long N = 5e3 + 1 ;
long long h [ N ] , to [ N << 1 ] , nt [ N << 1 ] , from [ N << 1 ];
long long w [ N << 1 ];
long long cnt , s , t , n , m ;
void add ( long long x , long long y , long long z ) {
    nt [ ++ cnt ] = h [ x ] ;
    h [ x ] = cnt ;
    from [ cnt ] = x;
    to [ cnt ] = y ;
    w [ cnt ] = z ;
}
long long ans = 0 ;
long long pre [ N << 1 ] ;
long long vis [ N << 1 ] , dist [ N << 1 ] ;
bool bfs ( ) {
    memset ( vis , 0 , sizeof vis );
    dist [ s ] = ( 1 << 30 ) ;
    vis [ s ] = 1 ;
    deque < long long > dq;
    dq . push_back ( s ) ;
    while ( ! dq . empty () ) {
        long long x = dq . front ( );
        dq . pop_front ( ) ;
        for ( long long i = h [ x ] ; i ; i = nt [ i ] ) {
            long long y = to [ i ] ;
            if ( vis [ y ] || w [ i ] == 0 ) continue;
            dist [ y ] = min ( dist [ x ] , w [ i ] ) ;
            pre [ y ] = i ;
            dq . push_back ( y ) ;
            vis [ y ] = 1 ;
            if ( y == t )
                return true;
        }
    }
    return false;
}
void update ( ) {
    long long now = t ;
    while ( now != s ) {
        static long long x ;
        x = pre [ now ] ;
        w [ x ] -= dist [ t ] ;
        w [ x ^ 1 ] += dist [ t ] ;
        now = from [ x ] ;
    }
    ans += dist [ t ] ;
}
int main ( ) {
    // freopen ( "text.in" , "r" , stdin ) ;
    cin >> n >> m >> s >> t ;
    cnt = 1 ;
    for ( long long i = 1 ; i <= m ; i ++ ){
        static long long x , y , z ;
        cin >> x >> y >> z ;
        add ( x , y , z ) ;
        add ( y , x , 0 ) ;
    }
    while ( bfs ( ) ) {
        update ( ) ;
    }
    printf ( "%lld\n" , ans ) ;
    return 0 ;
}

标签:include,dist,EK,long,P3376,return,now,模板,dq
From: https://www.cnblogs.com/dadidididi/p/16859284.html

相关文章

  • P3387 【模板】缩点
    #include<iostream>#include<queue>#include<vector>usingnamespacestd;constintN=1e4+1;intn,m;vector<int>to[N];intval[N];voidadd......
  • 计算机结构 -- week 4
    指令集:CPU可以理解的完整的指令集合形式:机器代码,二进制,汇编代码assemblycodes 最后一个operand是ans的存放地址 操作数(数据)的存放地址: Mainmemory......
  • 解读Vue3模板编译优化
    今天的文章打算学习下Vue3下的模板编译与Vue2下的差异,以及VDOM下Diff算法的优化。编译入口了解过Vue3的同学肯定知道Vue3引入了新的组合Api,在组件mount阶......
  • Week6-TCP
    theLinkLayer,IPLayer,TransportLayerWhatpartofdatatransferdoesTCPsolve,andwhatpartdoesIPsolve?Thereliabilityofdatatransmissions,andt......
  • P3865 【模板】ST表
    【模板】ST表题目背景这是一道ST表经典题——静态区间最大值请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复杂度为\(O(1)\)。若使用更高时间复......
  • 【单片机/嵌入式】【梁山派】学习日志02:工程模板创建
    工程模板创建一、新建工程目录1.1包含文件(1)Project:存放工程文件,编译文件等。(2)Firmware:存放ARM内核文件,标准外设库文件等。(3)Hardware:存放开发板的硬件驱动文件。(4)App......
  • 字典树模板+初始化模板
    https://codeforces.com/contest/1658/problem/D2intl,r;intson[M][2],idx;inta[N];voidinit(){//初始化**idx=0;son[0][0]=son[0][1]=0;}......
  • 使用非类型的模板参数和传普通参数的区别?
     如上所示、想完成加法操作有两种写法一种是用一个模板、一种是用两个参数虽然功能上差不多、但其中的区别还是有的:函数调用时要把压栈而模板里的东西只会......
  • 模板、特化模板和普通函数混用时的的匹配顺序
      有普通函数、总是会先调普通的函数、如上图、鼠标停在foo(3.0)上时会有一个对于普通函数的高亮如果没普通函数、而是有特化、那么会调用特化:   总结:编译器......
  • 模板方法模式
    数据库连接对数据库的操作一般包括连接、打开、使用、关闭等步骤,在数据库操作模板类中我们定义了connDB()、openDB()、useDB()、closeDB()四个方法分别对应这四个步骤。对......