首页 > 其他分享 >【板子】网络流(Dinic)

【板子】网络流(Dinic)

时间:2024-02-05 17:44:09浏览次数:30  
标签:head const edgeid int ed 网络 板子 Dinic st

#include<bits/stdc++.h>
using namespace std;

const int N = 205;
const int M = 205;

const int INF = 0x3f3f3f3f;

int edgeid=2;
int head[N];
struct edge
{
    int v,w,nxt;
}e[M*2];
inline void addedge(int u,int v,int w)
{
    e[edgeid].v=v;
    e[edgeid].w=w;
    e[edgeid].nxt=head[u];
    head[u]=edgeid;
    edgeid++;
}

int n,m;
int ans;
int cur[N];
int dis[N];

int st,ed;

queue<int> q;
bool Bfs()
{
    while(!q.empty()) q.pop();
    for(int i=1;i<=n;i++)
    {
        cur[i]=head[i]; //重置当前弧优化
        dis[i]=0; //重置距离
    }
    q.push(st);
    dis[st]=1;
    while(!q.empty())
    {
        int u=q.front();
        q.pop();
        for(int i=head[u];i;i=e[i].nxt)
        {
            int v=e[i].v;
            if(e[i].w && !dis[v]) 
            {
                dis[v]=dis[u]+1;
                if(v==ed) return 1;
                q.push(v);
            }
        }
    }
    return 0;
}

int Dfs(int u,int rst)
{
    if(!rst || u==ed) return rst;
    int sum=0;
    for(int i=cur[u];i;i=e[i].nxt) //当前弧优化 确保时间复杂度O(n^2 m)
    {
        int v=e[i].v;
        cur[u]=i;
        int f;
        if(dis[v]==dis[u]+1 && (f=Dfs(v,min(rst,e[i].w))))
        {
            e[i].w-=f;
            e[i^1].w+=f;
            sum+=f;
            rst-=f;
            if(rst==0) break;//余量优化 常数
        }
    }
    if(sum==0) dis[u]=0;//废点优化 常数
    return sum;
}

void Dinic()
{
    while(Bfs())
    {
        ans+=Dfs(1,INF);
    }
}

int main()
{
    cin>>m>>n;
    st=1,ed=n;
    for(int i=1;i<=m;i++)
    {
        int u,v,w;
        scanf("%d%d%d",&u,&v,&w);
        addedge(u,v,w);
        addedge(v,u,0);
    }
    Dinic();
    cout<<ans;
    return 0;
}

标签:head,const,edgeid,int,ed,网络,板子,Dinic,st
From: https://www.cnblogs.com/yeyou26/p/18008557

相关文章

  • Docker网络与存储
    网络:bridge模式:当Docker进程启动后,会在主机上创建一个名为docker0的虚拟网桥,主机上启动的docker容器会连接到这个虚拟网桥上.从docker0子网中分配一个ip给容器使用,并设置docker0的IP地址为容器的默认网关.在主机上创建一堆虚拟网卡设备vethpair设备,Docker将vethpair设......
  • 99%离线安装Chrome成功 没有网络也能安装
    原文地址:https://zhuanlan.zhihu.com/p/649737764谷歌浏览器Chrome,现代化的浏览器,使用它来上网是一个非常不错的选择。不过每次我想下载谷歌浏览器时,默认下载到的总是在线安装包,大小大约1~2MB,安装时电脑必须联网,每次都要从网络上下载:不知道你想不想要谷歌浏览器的本地安装包?......
  • 汽车网络安全,防止汽车软件中的漏洞
    喜欢本篇文章的话记得点赞评论⭐收藏 汽车网络安全在汽车开发中至关重要,尤其是在汽车软件日益互联的情况下。在这篇博客中,我们将分享如何防止汽车网络安全漏洞。 Jumpto你喜欢的部分 为什么汽车网络安全很重要?主要汽车网络安全漏洞内存缓冲区问题代码注入顶级汽车......
  • Automotive IQ第14届年度汽车网络安全大会将于2024年在底特律举行
    在接受《AutomotiveIQ》独家采访时,福特汽车公司汽车和移动网络安全高级顾问DarrenShelcusky深入探讨了符合UNECER155/R156法规的关键因素,揭示了汽车行业满足这些严格法规的过程。从区分网络安全标准和法规到详细说明其对主机厂和更广泛的汽车网络安全领域的影响,Darren提供了综......
  • 网络安全书籍推荐大全(持续更新)
    Web安全书籍1 –WebHacking101中文版2 –KaliLinuxWeb渗透测试秘籍中文版3 –KaliLinuxburpsuite实战指南4 –渗透测试Node.js应用5 –Web安全资料和资源列表6KaliLinuxWeb渗透测试秘籍中文版信息安全等级保护欺骗的艺术HTTP权威指南Web安全渗......
  • 在 Effect 中直接请求数据很容易导致“网络瀑布”。当你渲染父组件时,它会请求一些数据
    在Effect中直接请求数据很容易导致“网络瀑布”。当你渲染父组件时,它会请求一些数据,再渲染子组件,然后重复这样的过程来请求子组件的数据。如果网络不是很快,这将比并行请求所有数据要慢得多。如何理解?在React中,当我们在Effect(例如useEffectHook)中直接请求数据时,如果数据请求......
  • 【学习笔记】网络流与二分图初步
    网络流与二分图初步我们约定,对于有向图\(G=(V,E)\),分析复杂度时\(m=|E|,n=|V|\)。在分析时间复杂度时,网络流的实际表现基本都优于其理论上的时间复杂度表现。I概念(1)网络流:在一个有向带权图上(不考虑自环和重边),与最短路类似,我们定义一个源点\(s\)和一个汇点\(t\)......
  • 深度学习-DNN深度神经网络-反向传播02-python代码实现nn-41
    目录1.举例2.python实现1.举例2.python实现importnumpyasnpfromsklearn.datasetsimportfetch_mldatafromsklearn.utils.extmathimportsafe_sparse_dotdeftrain_y(y_true):y_ohe=np.zeros(10)y_ohe[int(y_true)]=1returny_ohemnist......
  • LbfoAdmin.exe 是一个用于管理和配置 Windows Server 中网络适配器绑定和负载均衡功能
    LbfoAdmin.exe是一个用于管理和配置WindowsServer中网络适配器绑定和负载均衡功能的命令行工具。以下是一些常用的LbfoAdmin.exe命令和参数:LbfoAdmin.exe/show:显示当前配置的适配器绑定和负载均衡设置。LbfoAdmin.exe/create/Team:"TeamName"/TeamMembers:"NIC1N......
  • 《UNIX网络编程 卷2:进程间通信(第2版)》PDF
    内容简介《UNIX网络编程.卷2:进程间通信(第2版)》是一部UNIX网络编程的经典之作!进程间通信(IPC)几乎是所有Unix程序性能的关键,理解IPC也是理解如何开发不同主机间网络应用程序的必要条件。《UNIX网络编程.卷2:进程间通信(第2版)》从对PosixIPC和SystemVIPC的内部结构开始讨论,全面......