闫学灿acwing_用标号法求网络最大流

闫学灿acwing_用标号法求网络最大流给定一个包含 n 个点 m 条边的有向图,并给定每条边的容量,边的容量非负。图中可能存在重边和自环。求从点 S 到点 T 的最大流。输入格式第一行包含四个整数 n,m,S,T。接下来 m 行,每行三个整数 u,v,c,表示从点 u 到点 v 存在一条有向边,容量为 c。点的编号从 1 到 n。输出格式输出点 S 到点 T 的最大流。如果从点 S 无法到达点 T 则输出 0。数据范围2≤n≤1000,1≤m≤10000,0≤c≤10000,S≠T输入样例:7 14 1 71 2

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

给定一个包含 n 个点 m 条边的有向图,并给定每条边的容量,边的容量非负。

图中可能存在重边和自环。求从点 S 到点 T 的最大流。

输入格式
第一行包含四个整数 n,m,S,T。

接下来 m 行,每行三个整数 u,v,c,表示从点 u 到点 v 存在一条有向边,容量为 c。

点的编号从 1 到 n。

输出格式
输出点 S 到点 T 的最大流。

如果从点 S 无法到达点 T 则输出 0。

数据范围
2≤n≤1000,
1≤m≤10000,
0≤c≤10000,
S≠T

输入样例:
7 14 1 7
1 2 5
1 3 6
1 4 5
2 3 2
2 5 3
3 2 2
3 4 3
3 5 3
3 6 7
4 6 5
5 6 1
6 5 1
5 7 8
6 7 7
输出样例:
14
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
const int M = 2e4 + 10;
const int INF = 0x3f3f3f3f;
struct Edge{ 
   
    int v,next,w;
}edge[M];
int head[N],cnt;
int pre[N],d[N],q[N],st[N];
int tt = 0,hh = 0;
int n,m,s,e;
void add(int u,int v,int w){ 
   
    edge[cnt].v = v;
    edge[cnt].w = w;
    edge[cnt].next = head[u];
    head[u] = cnt ++;
}
bool bfs(){ 
   
    hh = tt = 0;
    memset(st,0,sizeof st);
    q[tt ++] = s,d[s] = INF,st[s] = true;
    pre[s] = -1;
    while(hh < tt){ 
   
        int t = q[hh ++];
        for(int i = head[t];~i;i = edge[i].next){ 
   
            int v = edge[i].v,w = edge[i].w;
            if(!st[v] && w > 0){ 
   
                st[v] = true;
                d[v] = min(d[t],w);
                pre[v] = i;
                if(v == e)return true;
                q[tt ++] = v;
            }
        }
    }
    return false;
}
int EK(){ 
   
    int maxflow = 0;
    while(bfs()){ 
   
        maxflow += d[e];
        for(int t = e;t != s;t = edge[pre[t] ^ 1].v){ 
   
            edge[pre[t]].w -= d[e];
            edge[pre[t] ^ 1].w += d[e];
        }
    }
    return maxflow;
}
int main(){ 
   
    int x,y,w;
    memset(head,-1,sizeof head);
    cin>>n>>m>>s>>e;
    for(int i = 0;i < m;i ++){ 
   
        cin>>x>>y>>w;
        add(x,y,w);
        add(y,x,0);
    }
    // bfs();
    cout<<EK()<<endl;
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169094.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月10日 下午9:16
下一篇 2022年8月10日 下午9:36


相关推荐

  • UML学习入门就这一篇文章

    1.1UML基础知识扫盲UML这三个字母的全称是UnifiedModelingLanguage,直接翻译就是统一建模语言,简单地说就是一种有特殊用途的语言。你可能会问:这明明是一种图形,为什么说是语言呢?伟大的汉字还不是从图形(象形文字)开始的吗?语言是包括文字和图形的!其实有很多内容文字是无法表达的,你见过建筑设计图纸吗?里面还不是很多图形,光用文字能表达清楚建筑设计吗?在建筑界,…

    2022年4月13日
    82
  • webmagic mysql_webmagic使用

    webmagic mysql_webmagic使用webmagic 是 Java 语言用于爬虫的工具 官网地址 http webmagic io 中文文档地址 http webmagic io docs zh 使用 webmagic 有 3 种配置需要注意 日志配置 log4j webmagic 爬取配置 如超时时间 使用数据库的话数据库连接池配置 有一些配置最好做到可以随机器性能情况而改变配置信息 这样做的目的是为了将项目打成包以后在命令行下执行

    2026年3月16日
    3
  • Hashmap和hashtable区别

    Hashmap和hashtable区别1 相同点 1 都是 map 的实现类 都是键值对集合 2 里边的元素都是无序的 跟添加顺序无关 2 不同点 1 HashMap 允许有一个 null 键和多个 null 值 2 HashMap 不是线程安全的 HashTable 是线程安全的

    2026年3月17日
    1
  • 国内直连Nano Banana 2,附生成案例+保姆级使用教程

    国内直连Nano Banana 2,附生成案例+保姆级使用教程

    2026年3月13日
    2
  • eclipse使用–设置自动补全代码

    1、Java设置自动补全(1)设置自动补全依次点击Window–>Perferences(选项设置)–>Java–>Editor(编辑)–>ContentAssist(内容辅助/代码提示)然后在“ContentAssist”页面中,可以看到下面有一个AutoActivation中有一个Autoactivationtrigge…

    2022年4月4日
    792
  • js文件加载太慢,JavaScript文件加载加速

    js文件加载太慢,JavaScript文件加载加速js 脚本加载太慢 JavaScript 脚本加载加速测试背景 JS 文件大小 6 1kB 传统形式加载 js 文件 amp lt scripttype text javascript src js lib util BaseUtil js amp gt amp l

    2026年3月20日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号