当前位置: 首页 > news >正文

AcWing 2188:无源汇上下界可行流 ← Dinic算法

【题目来源】https://www.acwing.com/problem/content/2190/【题目描述】给定一个包含 n 个点 m 条边的有向图每条边都有一个流量下界和流量上界。求一种可行方案使得在所有点满足流量平衡条件的前提下所有边满足流量限制。【输入格式】第一行包含两个整数 n 和 m。接下来 m 行每行包含四个整数 a,b,c,d 表示点 a 和 b 之间存在一条有向边该边的流量下界为 c流量上界为 d。点编号从 1 到 n。【输出格式】如果存在可行方案则第一行输出 YES接下来 m 行每行输出一个整数其中第 i 行的整数表示输入的第 i 条边的流量。如果不存在可行方案直接输出一行 NO。如果可行方案不唯一则输出任意一种方案即可。【输入样例一】4 61 2 1 32 3 1 33 4 1 34 1 1 31 3 1 34 2 1 3【输出样例一】YES123211【输入样例二】4 61 2 1 22 3 1 23 4 1 24 1 1 21 3 1 24 2 1 2【输出样例二】NO【数据范围】1≤n≤200,1≤m≤10200,1≤a,b≤n,0≤c≤d≤10000【算法分析】Dinic算法https://blog.csdn.net/hnjzsyjyj/article/details/161317988【算法代码】A[N] —— 流量平衡差数组记录每个点“流入 - 流出”的差值判断是否存在可行流。#include bits/stdc.h using namespace std; typedef long long LL; const int INF0x3f3f3f3f; const int N2e25,M2e55; int h[N],e[M],ne[M],idx,f[M],low[M]; int q[N],cur[N],d[N],A[N]; int n,m,S,T; void add(int a,int b,int c,int d) { e[idx]b,ne[idx]h[a],f[idx]d-c,low[idx]c,h[a]idx; e[idx]a,ne[idx]h[b],f[idx]0,h[b]idx; } bool bfs() { memset(d,-1,sizeof d); int hh0,tt0; q[0]S,d[S]0; while(hhtt) { int uq[hh]; for(int ih[u]; ~i; ine[i]) { int ve[i]; if(d[v]-1 f[i]) { d[v]d[u]1; q[tt]v; } } } return d[T]!-1; } int dfs(int u,int lim) { if(uT) return lim; int flow0; for(int icur[u]; ~i flowlim; ine[i]) { cur[u]i; int ve[i]; if(d[v]d[u]1 f[i]) { int tdfs(v,min(f[i],lim-flow)); if(!t) d[v]-1; f[i]-t,f[i^1]t,flowt; } } return flow; } LL dinic() { LL r0,flow0; while(bfs()) { //0~T for(int i0; iT; i) cur[i]h[i]; while(flowdfs(S,INF)) rflow; } return r; } int main() { memset(h,-1,sizeof h); cinnm; S0,Tn1; for(int i1; im; i) { int a,b,c,d; cinabcd; add(a,b,c,d); A[a]-c,A[b]c; } int tot0; for(int i1; in; i) { if(A[i]0) add(S,i,0,A[i]),totA[i]; else if(A[i]0) add(i,T,0,-A[i]); } if(dinic()tot) { coutYES\n; for(int k1; km; k) { int i2*(k-1); coutf[i^1]low[i]endl; } } else coutNO\n; return 0; } /* in: 4 6 1 2 1 3 2 3 1 3 3 4 1 3 4 1 1 3 1 3 1 3 4 2 1 3 out: YES 1 2 3 2 1 1 */【参考文献】https://blog.csdn.net/hnjzsyjyj/article/details/161317988https://blog.csdn.net/hnjzsyjyj/article/details/127179286https://www.acwing.com/solution/content/61022/
http://www.zskr.cn/news/1404757.html

相关文章:

  • 嵌入式系统信任链架构:从硬件信任根到远程证明的工程实践
  • 深圳厂房仓库搬家选哪家好?2026避坑全攻略 - 幸福生活序曲
  • 2026全国光伏电缆TOP5品牌实力榜:谁是首选? - 深度智识库
  • CentOS 7上搞定NUMECA Fine 10.1:从下载到破解的保姆级避坑实录
  • 2026 湖北百度推广公司哪家靠谱?本地优质服务商详细推荐 - 深度智识库
  • AI财务审核系统哪家好?智能发票识别与合规审查平台精选 | 汇联易 - 财务流程医生
  • 2026年AI面试模拟器能力解析:3款主流面试工具推荐与深度测评
  • CAESAR竞赛认证加密算法全解析:从AEGIS到Ascon的工程选型指南
  • Arm CCA机密计算:CAGE框架如何为GPU/FPGA构建安全加速环境
  • Elden Ring帧率解锁与游戏增强:深度解析与实战指南
  • 2026郑州翡翠回收测评:添价收翡翠回收,便民服务覆盖全城区域 - 薛定谔的梨花猫
  • 专攻海外三相 208V!优比施 UPS 适配北美 / 东南亚,比肩进口大牌
  • Boss-Key:Windows下一键隐藏窗口的终极隐私保护解决方案
  • 这个网盘拉新方法真脏...
  • 3分钟掌握PicQuickCompare:图片差异检测的终极效率工具
  • 让AI优先推荐我们产品的方案哪个好?五类核心能力与选型建议 - FaiscoJeff
  • 从PDM到I2S:数字麦克风信号链的硬件解码与实战调试
  • 5分钟搞定!国家中小学智慧教育平台电子课本PDF下载完整教程
  • 2026森林火情监测低空平台系统推荐:从建模到应急响应的全链路技术支撑 - 品牌2025
  • CANoe数据库(.dbc)从零构建实战:模板选择、信号定义与工程集成
  • 安徽儿童汉服源头厂家怎么选?2026年推荐TOP10 - 界川
  • 【OpenCV 实战指南】图像保存的进阶技巧与避坑指南(cv2.imwrite)
  • 机器视觉驱动的猪只腹式呼吸建模【附模型】
  • Node.js 服务端项目如何集成 Taotoken 实现异步 AI 功能调用
  • 技术演进与社会变迁:从《电话》一文看通信工具如何重塑乡村共同体
  • 解决Claude Code访问不稳定问题转向Taotoken的配置指南
  • 基于SpringBoot的图书个性化推荐借阅系统毕业设计
  • 分布式群智能算法在HVAC系统全局优化中的应用与实践
  • 性价比高的砂磨机推荐维度分析报告 - 上海奎特机电
  • ChromaControl完整指南:如何用一款软件统一控制所有RGB灯光设备