圣经中基甸的故事_未知之路

圣经中基甸的故事_未知之路给定一个包含 n 个点 m 条边的有向图,每条边都有一个流量下界和流量上界。给定源点 S 和汇点 T,求源点到汇点的最小流。输入格式第一行包含四个整数 n,m,S,T。接下来 m 行,每行包含四个整数 a,b,c,d 表示点 a 和 b 之间存在一条有向边,该边的流量下界为 c,流量上界为 d。点编号从 1 到 n。输出格式输出一个整数表示最小流。如果无解,则输出 No Solution。数据范围1≤n≤50003,1≤m≤125003,1≤a,b≤n,0≤c≤d≤21474836

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

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

给定一个包含 n 个点 m 条边的有向图,每条边都有一个流量下界和流量上界。

给定源点 S 和汇点 T,求源点到汇点的最小流。

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

接下来 m 行,每行包含四个整数 a,b,c,d 表示点 a 和 b 之间存在一条有向边,该边的流量下界为 c,流量上界为 d。

点编号从 1 到 n。

输出格式
输出一个整数表示最小流。

如果无解,则输出 No Solution。

数据范围
1≤n≤50003,
1≤m≤125003,
1≤a,b≤n,
0≤c≤d≤2147483647,
数据保证答案不超过 int 范围。

输入样例:
7 12 6 7
6 1 0 2147483647
1 7 0 2147483647
6 2 0 2147483647
2 7 0 2147483647
6 3 0 2147483647
3 7 0 2147483647
6 4 0 2147483647
4 7 0 2147483647
6 5 0 2147483647
5 7 0 2147483647
5 1 1 2147483647
3 4 1 2147483647
输出样例:
2
#include<bits/stdc++.h>
using namespace std;
const int N = 5e4 + 10;
const int M = 2*(125e3 + 10 + N);
const int INF = 2147483647;
typedef long long ll;
struct Edge{ 
   
    int v,next,w,l,h;
}edge[M];
int head[N],cnt;
void add(int u,int v,int l,int h){ 
   
    edge[cnt].v = v;
    edge[cnt].h = h;
    edge[cnt].l = l;
    edge[cnt].w = h - l;
    edge[cnt].next = head[u];
    head[u] = cnt ++;
}
int d[N],cur[N],q[N],tt = 0,hh = 0;
int A[N];
int n,m,s,e;
bool bfs(){ 
   
    hh = 0,tt = 0;
    memset(d,-1,sizeof d);
    d[s] = 0,cur[s] = head[s],q[tt ++] = s;
    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(d[v] == -1 && w > 0){ 
   
                q[tt ++] = v;
                cur[v] = head[v];
                d[v] = d[t] + 1;
                if(v == e)return true;
            }
        }
    }
    return false;
}
int dfs(int u,int limit){ 
   
    if(u == e)return limit;
    int flow = 0;
    for(int i = cur[u];~i && flow < limit;i = edge[i].next){ 
   
        int v = edge[i].v, w = edge[i].w;
        cur[u] = i;
        if(d[v] == d[u] + 1 && w > 0){ 
   
            int t = dfs(v,min(w,limit - flow));
            if(!t)d[v] = -1;
            flow += t,edge[i].w -= t,edge[i ^ 1].w += t;
        }
    }
    return flow;
}
ll dinic(){ 
   
    int maxflow = 0,flow;
    while(bfs())while(flow = dfs(s,INF))maxflow += flow;
    return maxflow;
}
int main(){ 
   
    memset(head,-1,sizeof head);
    int ts,te,S,E;      //ts te代表源点和汇点 S E代表虚拟源点和虚拟汇点
    cin>>n>>m>>ts>>te;
    S = 0,E = n + 1;
    int x,y,l,h;
    for(int i = 0;i < m;i ++){ 
   
        scanf("%d %d %d %d",&x,&y,&l,&h);
        add(x,y,l,h),add(y,x,0,0);
        A[y] += l,A[x] -= l;
    }
    int tot = 0;
    for(int i = 1;i <= n;i ++){ 
    
        if(A[i] > 0)add(S,i,0,A[i]),add(i,S,0,0),tot += A[i];
        else if(A[i] < 0)add(i,E,0,-A[i]),add(E,i,0,0);
    }
    add(te,ts,0,INF),add(ts,te,0,0);
    s = S,e = E;
    if(tot != dinic()){ 
   
        cout<<"No Solution"<<endl;
    }
    else{ 
   
        int res = edge[cnt - 1].w;
        edge[cnt - 1].w = edge[cnt - 2].w = 0;
        s = te,e = ts;
        cout<<res - dinic()<<endl;
    }
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2022年8月9日 下午2:46
下一篇 2022年8月9日 下午3:00


相关推荐

  • c语言单元测试框架–CuTest

    c语言单元测试框架–CuTest1 简介 CuTest 是一款微小的 C 语言单元测试框 是我迄今为止见到的最简洁的测试框架之一 只有 2 个文件 CuTest c 和 CuTest h 全部代码加起来不到一千行 麻雀虽小 五脏俱全 测试的构建 测试的管理 测试语句 都全部包含在内 2 CuTest 剖析 2 1 断言一个测试 case 是否通过落到代码实处 就是对测试值与期待值之间进行比较 这就要用到断言 defineCu

    2026年3月19日
    1
  • HTTP.SYS 详解

    HTTP.SYS 详解http.sys 是一个位于Win2003和WinXPSP2中的操作系统核心组件,能够让任何应用程序通过它提供的接口,以http协议进行信息通讯。温馨提示:如果用户不慎删除了该驱动文件,不用担心,该驱动会在下次系统启动时重建。是一个删不掉的系统核心组件!实用程序结束该驱动,该驱动也会马上重新创建(只有粉碎文件才不能马上重建,但粉碎后,下次启动会重建)。微软在Windows

    2022年7月25日
    15
  • 离线包简介

    离线包简介传统的 H5 技术容易受到网络环境影响 因而降低 H5 页面的性能 通过使用离线包 可以解决该问题 同时保留 H5 的优点 离线包 是将包括 HTML JavaScript CSS 等页面内静态资源打包到一个压缩包内 预先下载该离线包到本地 然后通过客户端打开 直接从本地加载离线包 从而最大程度地摆脱网络环境对 H5 页面的影响 使用 H5 离线包可以给您带来以下优势 提升用户体验 通过离线包的方式把页面内静态资源嵌入到应用中并发布 当用户第一次开启应用的时候 就无需依赖网络环境下载该资源 而是

    2026年3月17日
    2
  • facade模式的好处_fa模式是什么意思

    facade模式的好处_fa模式是什么意思Facade模式使用Facade模式可以为互相关联在一起的错综复杂的类整理出高层接口(API)。其中的Facade角色可以让系统对外只有一个简单的接口(API)。而且,Facade角色还会考虑系统内部各个类之间的责任关系和依赖关系,按照正确的顺序调用各个类。示例程序示例程序类图Databasemportjava.io.FileInputStream;importjava.io….

    2025年7月28日
    4
  • XNA中的鼠标,键盘与操纵杆

    XNA中的鼠标,键盘与操纵杆

    2021年7月23日
    61
  • 股票实盘交易接口API(招商证券交易接口api)

    股票配资系统实盘交易接口怎么做有没有好用的实盘交易接口股票实盘交易接口做股票配资系统难免会用到交易接口,好用的能用的接口也少。券商那边也不提供,那索性自己开发股票配资实盘交易接口了。经过多次尝试,总算搞出来了,实时交易接口可以获取用户数据,实时对接,账户信息,委托买入卖出,支持多家券商。我们做股票配资系统的时候遇到过很多次交易接口问题,然后后面终于是解决了,现在我们的股票配资系统已经很完善…

    2022年4月15日
    581

发表回复

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

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