有上下界限制可行流

無源匯有上下界限制可行流(循環流)

即每條邊的流量限制為[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.pswp.cn/news/279317.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279317.shtml
英文地址,請注明出處:http://en.pswp.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;同時發布了一些新功能。安裝最新版…