有上下界限制可行流

无源汇有上下界限制可行流(循环流)

即每条边的流量限制为[L,R],判断有没有满足整个网络的可行流。

看看以前学的网络流,实际上它的流量限制为[0,C],现在无非多了一个下限的限制。

网络流的一个重要性质:除了源汇点的点,入流==出流。

本来点是不能存储水的,我们先不妨假设每条边都满足下限,对于某一条边来说,它的出水端的点水量-=L,入水端的点+=L,它的容量变为[0,R-L]。

这时候就会出现有的点水量是正的,另外点的水量是负的,如果能通过导流,使所有点的水量均为0,那么说明存在可行流。

怎么导流?建立一个超级源点s,超级汇点t,s向水量为正的点连边,容量即为水量。水量为负的点向t连边,容量即为水量。(自己脑补)

s到t跑一遍最大流,如果最大流为源点流出的水量之和,则存在可行流。。

有源汇的情况:汇点向源点连一条容量INF的边,即变成了无源汇的情况。

2018沈阳icpc网赛F(裸题):

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<vector>
  5 #include<algorithm>
  6 #include<queue>
  7 #include<map>
  8 using namespace std;
  9 typedef  long long ll;
 10 const int MAX_N = 5000;  
 11 const int MAX_M = 50000;  
 12 const int INF = 1000000000;  
 13 struct edge {
 14     int v, c, next;   
 15 } e[MAX_M];
 16 int p[MAX_N], eid;
 17 void init() {
 18     memset(p, -1, sizeof(p));
 19     eid = 0;
 20 }
 21 void insert(int u, int v, int c) {  
 22     e[eid].v = v;
 23     e[eid].c = c;
 24     e[eid].next = p[u];
 25     p[u] = eid++;
 26 }
 27 void addedge(int u, int v, int c) {  
 28     insert(u, v, c);
 29     insert(v, u, 0);  
 30 }
 31 int S, T;  
 32 int d[MAX_N];  
 33 bool CountLayer() {  
 34     memset(d, -1, sizeof(d));
 35     queue<int> q;
 36     q.push(S);
 37     d[S] = 0;
 38     while (!q.empty()) {
 39         int u = q.front();
 40         q.pop();
 41         for (int i = p[u]; i != -1; i = e[i].next) {
 42             int v = e[i].v;
 43             if (e[i].c > 0 && d[v] == -1) {
 44                 q.push(v);
 45                 d[v] = d[u] + 1;
 46             }
 47         }
 48     }
 49     return (d[T] != -1);  
 50 }
 51 
 52 ll dfs(int u, int flow) {  
 53     if (u == T) {
 54         return flow;
 55     }
 56     ll res = 0;
 57     for (int i = p[u]; i != -1; i = e[i].next) {
 58         int v = e[i].v;
 59         if (e[i].c > 0 && d[u] + 1 == d[v]) {
 60             ll tmp = dfs(v, min(flow, e[i].c));  
 61             flow -= tmp;
 62             e[i].c -= tmp;
 63             res += tmp;
 64             e[i ^ 1].c += tmp;  
 65             if (flow == 0) {  
 66                 break;
 67             }
 68         }
 69     }
 70     if (res == 0) {  
 71         d[u] = -1;
 72     }
 73     return res;
 74 }
 75 
 76 ll maxflow() {  
 77     ll res = 0;
 78     while (CountLayer()) {
 79         res += dfs(S, INF);  
 80     }
 81     return res;
 82 }
 83 ll def[5000];
 84 int main()
 85 {   
 86     int d=1; 
 87     int n,m,k;
 88     while(cin>>n>>m>>k)
 89     {
 90         int l,r,u,v;
 91         S=n+m+3,T=n+m+4;
 92         init();
 93         memset(def,0,sizeof def);
 94         scanf("%d%d",&l,&r);
 95         for(int i=1;i<=k;i++)
 96         {
 97             scanf("%d%d",&u,&v);
 98             v=v+n;
 99             addedge(u, v, 1);
100         }
101         for(int i=1;i<=n;i++)
102         {
103             addedge(n+m+1, i, r-l);
104             def[i]+=l;
105         }
106         for(int i=n+1;i<=n+m;i++)
107         {
108             addedge(i, n+m+2, r-l);
109             def[i]-=l;
110         }
111         addedge(n+m+2,n+m+1,INF);
112        
113         ll sum=0;
114         for(int i=1;i<=n+m;i++)
115         {
116             if(def[i]>0) {addedge(S,i,def[i]);sum+=def[i];}
117             else addedge(i,T,-def[i]);
118         }
119         if(sum==maxflow()) printf("Case %d: Yes\n",d++);
120         else printf("Case %d: No\n",d++);
121     }
122     return 0;
123 }

 

转载于:https://www.cnblogs.com/lnu161403214/p/9676465.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.gitignore文件将已经纳入版本管理的文件删除

git rm -r --cached . git add . git commit -m update .gitignore git push -u origin master 先将本地缓存删除&#xff0c;再提交&#xff0c;.gitignore文件只针对那些没有被staged的文件有效 参考博客&#xff1a;https://www.cnblogs.com/kevingrace/p/5690241.html 转载…

gmail收件箱标签设置_通过在Gmail中启用实验室功能来启动收件箱

gmail收件箱标签设置We recently looked at how you can make it easier to manage multiple inboxes in Gmail using the Multiple Inboxes Lab feature. This is a non-standard feature and it’s far from being the only one available to you. In fact there are numerou…

linux rmp命令安装包在哪里_rpm命令_Linux rpm 命令用法详解:RPM软件包的管理工具...

rpm命令是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序&#xff0c;由于它遵循GPL规则且功能强大方便&#xff0c;因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现&#xff0c;让Linux易于安装&#xff0c;升级&#xf…

【题解】洛谷P1066 [NOIP2006TG] 2^k进制数(复杂高精+组合推导)

洛谷P1066&#xff1a;https://www.luogu.org/problemnew/show/P1066 思路 挺难的一道题 也很复杂 满足题目要求的种数是两类组合数之和 r的最多位数m为 w/k&#xff08;当w mod k0 时&#xff09;w/k1&#xff08;当 w mod k1 时&#xff09;First: 位数为2~m的种数 即从2k-1中…

cmd命令不识别exp_Cmder-超量级的Cmd

Windows命令行工具cmd缺点窗口size不能便捷缩放复制文本&#xff0c;不能直接用鼠标拷贝&#xff0c;还需要多一道菜单操作&#xff1b;而且&#xff0c;还只能块状拷贝&#xff0c;而不是按行字符&#xff0c;极其不便不支持多Tab页&#xff0c;多窗口管理不便cmd界面丑陋&…

sizeof string

char a[] "hello"; string s "hello"; cout<<sizeof(a)<<endl; cout<<sizeof(s)<<endl; cout<<sizeof(s.c_str())<<endl;输出为 6 32 4最后一个c_str返回的是char*,所有指针的长度都为4。sizeof(s)为什么为32&#…

iTOP-4412开发板实现3路ADC数模转换驱动例程

学习下 linux 数模程序驱动的编写&#xff0c;本节我们实现的功能是实现三路ADC 数模转换。驱动程序驱动程序的名字&#xff1a;“itop4412_adc.c”。要想把这个驱动注册到内核,先把这个驱动程序放到内核的“driver/char”目录下面&#xff0c;如下图所示&#xff1a; Makefile…

β射线与哪些物质可产生较高的韧致辐射_辐射无所不在,香蕉土豆里都有?我们还能愉快生活吗?...

作为一枚受过系统科学教育&#xff0c;耳聪目明的当代年轻人&#xff0c;你是不是隔三差五被长辈亲友群里各种“XX有放射性&#xff0c;赶紧远离&#xff01;”的科学谣言搞得哭笑不得&#xff1f;又或者&#xff0c;稍一不注意&#xff0c;长辈亲友就买回了各种号称黑科技满满…

requests保存图片

1.创建07_save_jpg.py文件 import requests#发送请求respone requests.get("https://www.baidu.com/img/bd_logo1.png?wheresuper")#保存with open("a.png","wb")as f: f.write(respone.content)2.运行代码 转载于:https://www.cnblogs.com…

在Linux上运行Windows软件的4种以上方法

Linux has come a long way, but you may still need to run Windows applications occasionally – especially Windows-only PC games. Luckily, there are quite a few ways to run Windows applications on Linux. Linux已经走了很长一段路&#xff0c;但是您可能仍然偶尔需…

Spring-IOC XML 配置多个相同 ID 的 bean 加载分析

我们现在仍以 xml 中配置 bean 的方式来 使用 Spring &#xff0c;不考虑注解和扫包 配置相同id 的bean 定义一个 bean 类 TransactionManager /*** author maple 2018.09.10 下午10:27*/ public class TransactionManager {private static int counter 0;private String bean…

confd_confd + Nacos | 无代码侵入的配置变更管理

为什么要支持confd&#xff0c;老的应用配置管理模式是启动时读取配置文件&#xff0c;然后重新读取配置文件需要应用重启。一般的配置管理系统都是代码侵入性的&#xff0c;应用接入配置管理系统都需要使用对应的SDK来查询和监听数据的变更。对于一些已经成熟的系统来说&#…

如何在Windows 8中更改登录屏幕的颜色

Nearly every component of Windows 8 can be customized to suit your needs, some settings however are buried deep into the registry. Windows 8的几乎每个组件都可以自定义以满足您的需求&#xff0c;但是某些设置却深埋在注册表中。 如何在Windows 8中更改登录屏幕的颜…

我看的书籍

UNIX Network Programming, Volume 1, Second Edition, by W.Richard Stevens. Cocoa Programming for Mac OS X, Third Edition, by Aron Hillegass. Beginning AppleScript, by Stephen G. Kochan. 转载于:https://www.cnblogs.com/IvanYang/archive/2010/11/11/1874610.html…

linux下mysql数据库操作命令

1&#xff1a;启动服务 service mysqld start (5.0版本是mysqld) service mysql start (5.5.7版本是mysql)2&#xff1a;停止服务 service mysqld stop3&#xff1a;重启服务 service mysqld restart service mysql restart (5.5.7版本命令)4&#xff1a;登陆 登陆本地主机 my…

js怎么获取一个元素与屏幕右边的距离_js中如何获取某个元素到浏览器最左和最右的距离...

js中如何获取某个元素到浏览器最左和最右的距离以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;js中获取某个元素到浏览器最左和最右的距离的程序代码是&#xff1a;<> //自行下载分页…

kindle阅读_如何在Kindle上清除最远的阅读页面

kindle阅读It’s really annoying when you’re trying to re-read an eBook and your Kindle or Kindle app keeps trying to get you to jump to the end because that’s the “Furthest Location Read.” Here’s how to fix it. 当您尝试重新阅读电子书并且Kindle或Kindle…

杜鹃演绎奢华春装大片

化妆/发型:老黑(老黑造型)化妆 /发型助理:全科班学员(老黑化妆造型艺术学校)这组片子是为《芭莎》杂志拍摄的,而且就刊登在本月的刊目里.每次看到自己的作品都感到有一丝的成就感,这也是我喜欢这份工作最直接的原因,哈哈!!话不多说了,一起欣赏大片吧!!化妆/发型:老黑(老黑造型)…

WPF 绘制对齐像素的清晰显示的线条

WPF 绘制对齐像素的清晰显示的线条 原文:WPF 绘制对齐像素的清晰显示的线条版权声明&#xff1a;本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布&#xff0c;但务必保留文章署名吕毅&#xff08;包含链接&#xff1a;h…

中输入learn_Scikit-learn新版本发布,一行代码秒升级

十三 发自 凹非寺 量子位 报道 | 公众号 QbitAIScikit-learn&#xff0c;这个强大的Python包&#xff0c;一直深受机器学习玩家青睐。而近日&#xff0c;scikit-learn 官方发布了 0.22 最终版本。此次的更新修复了许多旧版本的bug&#xff0c;同时发布了一些新功能。安装最新版…