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

P3376 【模板】网络最大流

时间:2024-08-03 14:16:53浏览次数:7  
标签:return res ll 网络 while depth P3376 now 模板

原题链接

题解

优秀博客

朴素贪心:

每次找一条路,易得一条路的最大流量为路径上的最小权值,因此多次bfs遍历找合法路径,然后dfs更新路径上的权值

缺点请看上面的优秀博客

因此建立反向边的作用,有点类似于二分匹配:这条路径的部分流量由我负责,现在你去负责其他路径

第一次学,还是有很多地方不懂

code

#include<bits/stdc++.h>
#define ll long long
#define lb long double
#define lowbit(x) ((x)&(-x))
using namespace std;
const ll inf=1e13;
const ll mod=1e9+7;

ll qpow(ll a,ll n)
{
    ll res=1;
    while(n)
    {
        if(n&1) res=res*a%mod;
        a=a*a%mod;
        n>>=1;
    }
    return res;
}
ll inv(ll x)
{
    return qpow(x,mod-2);
}
ll fa[2000005];
ll finds(ll now){return now==fa[now]?now:finds(fa[now]);}


ll depth[205]={0};
ll maxflow=0;
ll G[205][205]={0};

ll n,m,s,t;

bool bfs()
{
    queue<ll> q;
    q.push(s);
    memset(depth,0,sizeof depth);
    depth[s]=1;


    while(q.size())
    {
        ll now=q.front();
        q.pop();
        for(ll i=1;i<=n;i++)
        {
            if(G[now][i]&&!depth[i])
            {
                depth[i]=depth[now]+1;
                q.push(i);
                if(i==t) return 1;
            }
        }
    }

    return 0;
}


ll dfs(ll now,ll flow)
{
    if(now==t)
    {
        maxflow+=flow;
        return flow;
    }


    ll used=0;
    for(ll i=1;i<=n;i++)
    {
        if(G[now][i]&&depth[i]==depth[now]+1)
        {
            ll tem=dfs(i,min(G[now][i],flow-used));

            G[now][i]-=tem;
            G[i][now]+=tem;

            used+=tem;
        }
    }

    return used;
}

void solve()
{
    cin>>n>>m>>s>>t;

    for(ll i=1;i<=m;i++)
    {
        ll x,y,w;
        cin>>x>>y>>w;

        G[x][y]+=w;
    }

    while(bfs())
    {
        dfs(s,inf);
    }

    cout<<maxflow<<'\n';
}
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int TT=1;
    //cin>>TT;
    while(TT--) solve();
    return 0;
}


标签:return,res,ll,网络,while,depth,P3376,now,模板
From: https://www.cnblogs.com/pure4knowledge/p/18340421

相关文章

  • 计算机网络--网络层串讲
    笔记整理自学习开源文档:小林coding为什么要做这个串讲?因为我在学习408网络层的时候,看完机构的视频课感觉没有很好地将知识串联起来,便找到《图解网络》作为补充,且小林的讲解是我认为开源中较为通俗易懂的,因此我在学习过程中将精华部分记录下来加上自己的理解并录制这个串讲......
  • 【Linux或者Windows中相关网络工具使用介绍】nc、ping、ifconfig、ipaddr、tcpdump、l
    在实际的网络排错、运维诊断、或者是开发过程中,熟练运用Linux或者Windows当中的有关网络工具,能够助力我们更迅速更精准地定位故障。因而,今天给大家分享几款必掌握的网络利器。1.nc命令在Linux中,nc命令即netcat命令,它被称为网络工具中的“瑞士军刀”,是一个功能强大的......
  • OSPF知识点大全,网络工程师快速收藏!
    OSPF概述与基本原理OSPF(OpenShortestPathFirst)是一个内部网关协议(IGP),用于在单一自治系统(AS)内交换路由信息。它是一个基于链路状态的协议,由IETF开发和维护,首次定义在RFC1131中,后来在RFC2328中得到扩展。OSPF采用Dijkstra的SPF算法来计算最短路径,以保证数据包能够通过最......
  • 一张图就把NAT网络地址转换讲明白了!
    网络地址转换(NetworkAddressTranslation,简称NAT)是一种用于解决IPv4地址不足问题的技术,同时也提供了一定程度的网络安全。本文将详细介绍NAT的工作原理、类型、应用场景及其优缺点。NAT的基本概念NAT是一种通过修改IP报文头部信息,将内部网络(私有网络)的IP地址转换为外部......
  • 易优CMS模板标签links友情链接控制友情链接的打开方式
    【基础用法】标签:links描述:用于获取友情链接列表。用法:{eyou:linkstype='text'loop='30'titlelen='15'}<ahref='{$field.url}'{$field.target}{$field.nofollow}>{$field.title}</a>{/eyou:links}属性:type=''链接类型,text为文......
  • 易优CMS模板标签beafter上下篇获取下一篇内容
    【基础用法】标签:beafter描述:获取当前文档上一篇、下一篇内容。用法:{eyou:beafterget='pre'}<ahref="{$field.arcurl}"title="{$field.title}">上一篇:{$field.title}</a>{eyou:else/}上一篇:暂无{/eyou:beafter}{eyou:beafterget='next&......
  • 易优CMS模板标签if条件判断多层次判断
    【基础用法】标签:if描述:条件判断,比switch判断标签更灵活些,视个人习惯而用。用法:{eyou:ifcondition='($eyou.field.has_children>0)'}当前栏目列表有下级栏目{eyou:else/}当前栏目列表没有下级栏目{/eyou:if}文件:无属性:condition=''原生php语法条件判断涉及表字段:无......
  • 易优CMS模板标签videoplay视频播放
    [基础用法]标签:videoplay描述:视频播放标签,用于视频模型的内容页,调用后台上传的视频。提示:如果后台上传的视频有多个选集,可以使用【videolist视频列表】标签,进行视频切换播放。用法:{eyou:videoplayaid='文档ID'autoplay='on'id='video'}<video{$video.id}width="100%"......
  • 深入探索EPSA:提升卷积神经网络性能的新式注意力模块
     原论文地址:https://arxiv.org/abs/2105.14447摘要摘要部分提出了一种新的注意力模块——金字塔分割注意力(PSA)模块,该模块通过替代ResNet瓶颈块中的3x3卷积,显著提升了模型性能。PSA模块能够作为即插即用组件,增强网络的多尺度表征能力,使EPSANet在多个计算机视觉任务上超越了......
  • 基于深度学习的适应硬件的神经网络
    基于深度学习的适应硬件的神经网络设计旨在最大限度地利用特定硬件平台的计算和存储能力,提高模型的执行效率和性能。这些硬件包括图形处理单元(GPU)、张量处理单元(TPU)、现场可编程门阵列(FPGA)和专用集成电路(ASIC)。以下是关于适应硬件的神经网络的详细介绍:1.背景和动机硬件异构......