首页 > 其他分享 >常用模板

常用模板

时间:2024-03-16 09:02:31浏览次数:13  
标签:常用 idx int tt flow add edge 模板

最大流:

int s,t;
int h[N],e[M],f[M],ne[M],idx;
int q[N],d[N],cur[N];
void add_edge_ (int a,int b,int c) {
    e[idx] = b;
    f[idx] = c;
    ne[idx] = h[a];
    h[a] = idx++;
}
void add_edge (int a,int b,int c) {
    add_edge_ (a,b,c),add_edge_ (b,a,0);
}
bool BFS () {
    int hh = 0,tt = -1;
    q[++tt] = s;
    memset (d,-1,sizeof (d));
    d[s] = 1;
    cur[s] = h[s];
    while (hh <= tt) {
        int u = q[hh++];
        for (int i = h[u];~i;i = ne[i]) {
            int v = e[i];
            if (d[v] == -1 && f[i]) {
                d[v] = d[u] + 1;
                cur[v] = h[v];
                if (v == t) return true;
                q[++tt] = v;
            }
        }
    }
    return false;
}
int max_flow (int u,int lim) {
    if (u == t) return lim;
    int flow = 0;
    for (int i = cur[u];~i && flow < lim;i = ne[i]) {
        cur[u] = i;
        int v = e[i];
        if (d[v] == d[u] + 1 && f[i]) {
            int tmp = max_flow (v,min (lim - flow,f[i]));
            if (!tmp) d[v] = -1;
            f[i] -= tmp,f[i ^ 1] += tmp,flow += tmp;
        }
    }
    return flow;
}
int dinic () {
    int ans = 0,flow;
    while (BFS ()) {
        while (flow = max_flow (s,INF)) ans += flow;
    }
    return ans;
}

最小费用最大流:

int s,t;
int h[N],e[M],ne[M],f[M],w[M],idx;
int q[N],d[N],flow[N],pre[N];
bool st[N];
void add_edge_ (int a,int b,int c,int d) {
    e[idx] = b;
    f[idx] = c;
    w[idx] = d;
    ne[idx] = h[a];
    h[a] = idx++;
}
void add_edge (int a,int b,int c,int d) {
    add_edge_ (a,b,c,d),add_edge_ (b,a,0,-d);
}
bool SPFA () {
    int hh = 0,tt = 0;
    q[tt++] = s;
    memset (d,-0x3f,sizeof (d));
    d[s] = 0;
    memset (flow,0,sizeof (flow));
    flow[s] = INF;
    while (hh != tt) {
        int u = q[hh++];
        if (hh == N) hh = 0;
        st[u] = false;
        for (int i = h[u];~i;i = ne[i]) {
            int v = e[i];
            if (f[i] && d[v] < d[u] + w[i]) {
                d[v] = d[u] + w[i];
                flow[v] = min (flow[u],f[i]);
                pre[v] = i;
                if (!st[v]) {
                    q[tt++] = v;
                    if (tt == N) tt = 0;
                    st[v] = true;
                }
            }
        }
    }
    return flow[t] > 0;
}
int EK () {
    int ans = 0;
    while (SPFA ()) {
        ans += d[t] * flow[t];
        for (int i = t;i != s;i = e[pre[i] ^ 1]) f[pre[i]] -= flow[t],f[pre[i] ^ 1] += flow[t];
    }
    return ans;
}

标签:常用,idx,int,tt,flow,add,edge,模板
From: https://www.cnblogs.com/incra/p/18076674

相关文章

  • C++ Function Templates (函数模板)
    C++FunctionTemplates[函数模板]1.TemplatesandGenericProgramming(模板与泛型编程)2.DefiningaFunctionTemplates(定义函数模板)2.1.InstantiatingaFunctionTemplate(实例化函数模板)2.2.TemplateTypeParameters(模板类型参数)2.3.Non......
  • 常用命令rsyncscp-1
    常用命令:rsync/scpscpscp命令文件传输scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读read only system时,用scp可以帮你把文件移出来。另外,scp还......
  • 常用压缩格式效率对比(tar、zip...)
    在Windows/WSL就用“BandZip”就可以了,很快,用pigz感觉没有起到加速效果在Ubuntu就用“pigz”单核心tar压缩与解压TAR格式tar只是一种打包格式,并不对文件进行压缩,主要是为了便于文件的管理,所以打包后的文档大小一般远远大于zip和tar.gz,但这种格式也有很明显的优点,例......
  • Python实战:Python列表(List)详解及其常用方法
    本文将详细介绍Python中的列表(List)数据结构,包括其基本概念、特点、常用方法以及实际应用案例。我们将深入探讨列表的内部实现机制,并通过丰富的代码示例来展示如何高效地使用列表来解决各种编程问题。1.引言在Python中,列表(List)是最常用的数据结构之一,它提供了一种灵活......
  • 机器学习 - PyTorch一些常用的用法
    如果我们要创建2维随机数importtorchrandom_tensor=torch.rand(size=(3,4))print(random_tensor)#输出tensor([[0.0137,0.7773,0.0150,0.2406],[0.6414,0.7830,0.7603,0.1866],[0.8157,0.8269,0.0438,0.0314]])有时候需要通过加......
  • 程序员常用小工具推荐
    前言    工作或者学习时,常常有一些工具能帮到我们很多,本次简单列举和说明,如果有更多更好用的,欢迎讨论补充。工具大全网络分析工具    Wireshark,可以很清晰的解析和过滤网络包,也有助于分析网络的的传输原理。linux环境下抓包可以使用tcpdump,所抓的包也可以......
  • tarjan模板
    信息传递题目描述tarjan模板点击查看代码voidtarjan(intx){ dfn[x]=low[x]=++num; stk.push(x); v[x]=1; for(inti=h[x];i;i=nxt[i]) { if(!dfn[to[i]]) { tarjan(to[i]); low[x]=min(low[x],low[to[i]]); } elseif(v[to[i]]) { low[x]=min(lo......
  • 四剑客常用总结
    四剑客常用总结find`find`命令在Linux中是一个极其强大的工具,用于在文件系统中搜索符合特定条件的文件和目录。以下是`find`命令一些常用的选项:1.**-name**:按名称查找文件。例如,查找所有扩展名为`.txt`的文件:```bashfind/path/to/search-name"*.txt"......
  • 分享两款常用的Android手机投屏软件
    1.AnLink下载链接:https://cn.anlinksoft.com/仅Windows可用,界面非常友好,文件传输也方便小米新系统澎湃会无法点击  2.scrcpyscrcpy同时适用于GNU/Linux,Windows和macOS。 仅显示设备屏幕,轻量化,其他操作需要命令行输入或快快捷键下载链接:https://github.com/Genymobi......
  • VS Code配置Vue3模板代码
    打开VSCode,file-Preferences-ConfigureUserSnippets{"Printtoconsole":{"prefix":"vue","body":["<scriptsetuplang=\"ts\">","i......