题目链接:点击查看

题目大意:给出一个 n 个点和 m 条边的有向图,每条边都有一个流量限制 [ lower , upper ],给定源点 s 和汇点 t ,求出源点到汇点的最小流

题目分析:参考我的上一篇博客:https://blog.csdn.net/qq_45458915/article/details/108339354

坑点就是卡常+卡当前弧优化,第八个点会TLE,如果有当前弧优化可以删除试一下,如果链式前向星是用结构体封装的可以解封装试一下

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#include<unordered_map>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=50100;const int M=125100;int du[N];int head[N],cnt,edge[(N+M)<<1],ver[(N+M)<<1],nt[(N+M)<<1];void addedge(int u,int v,int w)
{ver[cnt]=v;edge[cnt]=w;nt[cnt]=head[u];head[u]=cnt++;ver[cnt]=u;edge[cnt]=0;//反向边边权设置为0nt[cnt]=head[v];head[v]=cnt++;
}int d[N];//深度bool bfs(int s,int t)//寻找增广路
{memset(d,0,sizeof(d));queue<int>q;q.push(s);d[s]=1;while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];i!=-1;i=nt[i]){if(d[ver[i]])continue;if(!edge[i])continue;d[ver[i]]=d[u]+1;q.push(ver[i]);if(ver[i]==t)return true;}}return false;
}int dinic(int x,int t,int flow)//更新答案
{if(x==t)return flow;int rest=flow,i;for(i=head[x];i!=-1&&rest;i=nt[i]){if(edge[i]&&d[ver[i]]==d[x]+1){int k=dinic(ver[i],t,min(rest,edge[i]));if(!k)d[ver[i]]=0;edge[i]-=k;edge[i^1]+=k;rest-=k;}}return flow-rest;
}void init()
{memset(head,-1,sizeof(head));cnt=0;
}int solve(int st,int ed)
{int ans=0,flow;while(bfs(st,ed))while(flow=dinic(st,ed,inf))ans+=flow;return ans;
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);init();int n,m,s,t;scanf("%d%d%d%d",&n,&m,&s,&t);while(m--){int u,v,lower,upper;scanf("%d%d%d%d",&u,&v,&lower,&upper);addedge(u,v,upper-lower);du[u]-=lower,du[v]+=lower;}int st=N-1,ed=st-1,sum=0;for(int i=1;i<=n;i++){if(du[i]>0){addedge(st,i,du[i]);sum+=du[i];}elseaddedge(i,ed,-du[i]);}addedge(t,s,inf);if(solve(st,ed)!=sum){puts("please go home to sleep");return 0;}int ans=edge[cnt-1];edge[cnt-1]=edge[cnt-2]=0;printf("%d\n",ans-solve(t,s));return 0;
}

LOJ - #117. 有源汇有上下界最小流(有源汇有上下界的最小流)相关推荐

  1. LOJ - #116. 有源汇有上下界最大流(有源汇有上下界的最大流)

    题目链接:点击查看 题目大意:给出一个 n 个点和 m 条边的有向图,每条边都有一个流量限制 [ lower , upper ],给定源点 s 和汇点 t ,求出源点到汇点的最大流 题目分析:参考博客 ...

  2. 想说爱你不容易 | 使用最小 WEB API 实现文件上传(Swagger 支持)

    前言 上回,我们使用最小 WEB API 实现文件上传功能(<想说爱你不容易 | 使用最小 WEB API 实现文件上传>),虽然客户端访问是正常的,但是当打开 Swagger 页面时,发 ...

  3. Java web项目如何在服务器上跑起来(有源码)

    Java web项目如何在服务器上跑起来(有源码) 要用到的工具有:myeclipse.宝塔,navicat premium.xshell. 概述:本博文主要是帮助入门级新手怎么从网上下载一个java ...

  4. 找出一个二维数组中的鞍点,即该位置上的元素在该行最大,在该列最小,也可能没有靶点

    找出一个二维师数组中的鞍点,即该位置上的元素在该行最大,在该列最小,也可能没有靶点 思路: 找出某行最大数,再判断此数是否是所在列最小 代码: #include<stdio.h> int ...

  5. 设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是Li, 1<= i<= n。这n 个程序的读取概率分别是p1,p2,...,pn,且pi+p2+...+pn =

    设有n 个程序{1,2,-, n }要存放在长度为L的磁带上.程序i存放在磁带上的长度是Li, 1<= i<= n.这n 个程序的读取概率分别是p1,p2,-,pn,且pi+p2+-+pn ...

  6. 沁恒CH552G实现最小系统[沁恒8位机MCU最小系统]

    转载著名出处. 一.目标: 学习沁恒的8位机最小系统的实现. 最小系统连接方式通用下面所有常规8位MCU 二.资料获取: 1.首先从沁恒官网下载CH552的datasheet: CH552官网手册下载 ...

  7. 之江汇空间如何加音乐背景_互动课堂的使用|之江汇互动课堂如何使用?之江汇互动课堂使用方法...

    之江汇互动课堂是一款专门为教师设计的电子教学软件,之江汇互动课堂可以轻松布置课堂作业也可以有手写板,那么,之江汇互动课堂如何使用呢?下面就是之江汇互动课堂使用的方法步骤,我们一起往下看看吧! 方法步骤 ...

  8. 之江汇空间如何加音乐背景_之江汇互动课堂如何使用?之江汇互动课堂使用方法...

    之江汇互动课堂是一款专门为教师设计的电子教学软件,之江汇互动课堂可以轻松布置课堂作业也可以有手写板,那么,之江汇互动课堂如何使用呢?下面就是之江汇互动课堂使用的方法步骤,我们一起往下看看吧! 方法步骤 ...

  9. 上拉、下拉以及对应上拉电阻和下拉电阻的作用原理

    上拉.下拉以及对应上拉电阻和下拉电阻的作用原理 一.什么是上拉和下拉电路 上拉(Pull Up )或下拉(Pull Down)电阻两者统称为拉电阻 上拉就是单片机的IO口串联一个电阻到VDD: 下拉就 ...

  10. FTP连接不上,不能显示列表,不能上传文件等问题解决方法汇总

    FTP连接不上,不能显示列表,不能上传文件等问题解决方法汇总 前言 连接不上 不能显示文件列表或上传下载失败 前言 本人使用的是Centos7,安装的vsftpd 当使用工具或者API连接FTP服务器 ...

最新文章

  1. spring MVC、mybatis配置读写分离
  2. Linux系统是否能够联网
  3. 第九天2017/04/18(3、重载/覆盖 PK 重写/重定义、父类子类混搭风、抽象类)
  4. ArrayBlockingQueue原理分析-remove方法
  5. canvas html 动态,canvas.html
  6. AppStore编年史 iOS游戏开发者的变迁路
  7. 安卓手机上跑_直接在电脑上浏览操作安卓手机 #效率App #scrcpy
  8. 09面向对象基本概念
  9. 【声源定位】基于matlab单声源双麦克风房间冲激响应【含Matlab源码 547期】
  10. AXIS的Calculater 测试
  11. 优雅的避免字体侵权——微软雅黑并不免费
  12. 互联网裁员形势严峻,2019年程序员的发展空间还有多大?
  13. 佳能MG3620卡纸后错误代码1401/5100
  14. 真的明白Code、RO-data、RW-data和ZI-data吗?
  15. kirin710f是什么处理器_麒麟710F处理器怎么样
  16. oracle替换手机号中间的4位为*号(姓名,手机号,邮箱脱敏)
  17. RVM怎么下载和管理ruby版本 - 猿码设计师 ruby rvm
  18. PYNQ之Jupyter Notebook
  19. 关于防止表单重复提交
  20. 奇点临近:人类文明延续

热门文章

  1. 置springboot自带tomcat的最大连接数和最大并发数
  2. container到image
  3. MyBatis 缓存详解-一级缓存的不足
  4. Aop动态代理解决问题
  5. flume案例-网络数据采集-Flume安装
  6. HTTP_响应消息_响应头
  7. 使用ThreadLocal来解决问题
  8. 适合oracle运行的软件环境,创建最适合的Oracle运行环境
  9. python getattr_python __getattr__
  10. 【翻译】Nginx的反向代理