ZOJ2930 The Worst Schedule(最小割)

題目大概說有n個任務,每個任務可以提前或推遲,提前或推遲各有一定的費用,有的任務一旦推遲另一個任務也必須推遲,問怎么安排任務使花費最少,且最少花費的條件下提前的任務數最多能多少。

問題就是要把各個任務分成兩個集合。這么建容量網絡求最小的S-T割:源點向各個任務連容量為提前的費用的邊,各個任務向匯點連容量為推遲的費用的邊,如果A任務推遲B任務也必須推遲那么連A到B容量為INF的邊。

這樣求最小割就是最小的花費。S集合的點可以看作是選擇推遲的任務,T集合看作是選擇提前的任務,畫畫圖就知道了。

而第二問。。結論就是。。設從源點沿非關鍵邊floodfill得到的點數為n1(不含源點),從匯點反著floodfill得到的點數為n2(不含匯點),T中點最多的數目就是n2+(n-n1-n2),即n-n1。

和判定最小割唯一性類似做法。。

  1 #include<cstdio>
  2 #include<cstring>
  3 #include<queue>
  4 #include<algorithm>
  5 using namespace std;
  6 #define INF (1<<30)
  7 #define MAXN 222
  8 #define MAXM 222*444
  9 
 10 struct Edge{
 11     int v,cap,flow,next;
 12 }edge[MAXM];
 13 int vs,vt,NE,NV;
 14 int head[MAXN];
 15 
 16 void addEdge(int u,int v,int cap){
 17     edge[NE].v=v; edge[NE].cap=cap; edge[NE].flow=0;
 18     edge[NE].next=head[u]; head[u]=NE++;
 19     edge[NE].v=u; edge[NE].cap=0; edge[NE].flow=0;
 20     edge[NE].next=head[v]; head[v]=NE++;
 21 }
 22 
 23 int level[MAXN];
 24 int gap[MAXN];
 25 void bfs(){
 26     memset(level,-1,sizeof(level));
 27     memset(gap,0,sizeof(gap));
 28     level[vt]=0;
 29     gap[level[vt]]++;
 30     queue<int> que;
 31     que.push(vt);
 32     while(!que.empty()){
 33         int u=que.front(); que.pop();
 34         for(int i=head[u]; i!=-1; i=edge[i].next){
 35             int v=edge[i].v;
 36             if(level[v]!=-1) continue;
 37             level[v]=level[u]+1;
 38             gap[level[v]]++;
 39             que.push(v);
 40         }
 41     }
 42 }
 43 
 44 int pre[MAXN];
 45 int cur[MAXN];
 46 int ISAP(){
 47     bfs();
 48     memset(pre,-1,sizeof(pre));
 49     memcpy(cur,head,sizeof(head));
 50     int u=pre[vs]=vs,flow=0,aug=INF;
 51     gap[0]=NV;
 52     while(level[vs]<NV){
 53         bool flag=false;
 54         for(int &i=cur[u]; i!=-1; i=edge[i].next){
 55             int v=edge[i].v;
 56             if(edge[i].cap!=edge[i].flow && level[u]==level[v]+1){
 57                 flag=true;
 58                 pre[v]=u;
 59                 u=v;
 60                 //aug=(aug==-1?edge[i].cap:min(aug,edge[i].cap));
 61                 aug=min(aug,edge[i].cap-edge[i].flow);
 62                 if(v==vt){
 63                     flow+=aug;
 64                     for(u=pre[v]; v!=vs; v=u,u=pre[u]){
 65                         edge[cur[u]].flow+=aug;
 66                         edge[cur[u]^1].flow-=aug;
 67                     }
 68                     //aug=-1;
 69                     aug=INF;
 70                 }
 71                 break;
 72             }
 73         }
 74         if(flag) continue;
 75         int minlevel=NV;
 76         for(int i=head[u]; i!=-1; i=edge[i].next){
 77             int v=edge[i].v;
 78             if(edge[i].cap!=edge[i].flow && level[v]<minlevel){
 79                 minlevel=level[v];
 80                 cur[u]=i;
 81             }
 82         }
 83         if(--gap[level[u]]==0) break;
 84         level[u]=minlevel+1;
 85         gap[level[u]]++;
 86         u=pre[u];
 87     }
 88     return flow;
 89 }
 90 bool vis[MAXN];
 91 int dfs(int u){
 92     vis[u]=1;
 93     int res=(u!=vs);
 94     for(int i=head[u]; i!=-1; i=edge[i].next){
 95         int v=edge[i].v;
 96         if(vis[v] || edge[i].cap==edge[i].flow) continue;
 97         res+=dfs(v);
 98     }
 99     return res;
100 }
101 int main(){
102     int n,m,a,b;
103     while(~scanf("%d",&n) && n){
104         vs=0; vt=n+1; NV=vt+1; NE=0;
105         memset(head,-1,sizeof(head));
106         for(int i=1; i<=n; ++i){
107             scanf("%d",&a);
108             addEdge(vs,i,a);
109         }
110         for(int i=1; i<=n; ++i){
111             scanf("%d",&a);
112             addEdge(i,vt,a);
113         }
114         scanf("%d",&m);
115         while(m--){
116             scanf("%d%d",&a,&b);
117             addEdge(a,b,INF);
118         }
119         printf("%d ",ISAP());
120         memset(vis,0,sizeof(vis));
121         printf("%d\n",n-dfs(vs));
122     }
123     return 0;
124 }

?

轉載于:https://www.cnblogs.com/WABoss/p/5335143.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396460.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396460.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396460.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

為什么要free釋放內存_為什么在Free Code Camp上列出一份工作要花1,000美元?

為什么要free釋放內存by Michael D. Johnson邁克爾約翰遜(Michael D.Johnson) 為什么在Free Code Camp上列出一份工作要花1,000美元&#xff1f; (Why does it cost $1,000 to list a job on Free Code Camp?) I’ve recently spoken with employers looking for JavaScript …

python訪問注冊表_讀取注冊表的Python代碼

如果“Uninstall”中有超過1024個子鍵怎么辦&#xff1f;Use _winreg.QueryInfoKey(key)Python2:import errno, os, _winregproc_arch os.environ[PROCESSOR_ARCHITECTURE].lower()proc_arch64 os.environ[PROCESSOR_ARCHITEW6432].lower()if proc_arch x86 and not proc_ar…

ios 動畫 隱藏tabbar_UITabBarViewController 的底部 tabBar 隱藏

iOS pushViewController 時候隱藏 TabBar 的可以用interfaceUIViewController (UINavigationControllerItem)property(nonatomic,readonly,strong)UINavigationItem*navigationItem;// Created on-demand so that a view controller may customize its navigation appearance.p…

JS進階之---函數,立即執行函數

一、函數 函數聲明、函數表達式、匿名函數 函數聲明&#xff1a;使用function關鍵字聲明一個函數&#xff0c;再指定一個函數名&#xff0c;叫函數聲明。function name () { … } 函數表達式&#xff1a;使用function關鍵字聲明一個函數&#xff0c;但未給函數命名&#xff0c;…

主線程中有多個handler的情況

https://www.cnblogs.com/transmuse/archive/2011/05/16/2048073.html轉載于:https://www.cnblogs.com/genggeng/p/9806415.html

RandomForestClassifier(隨機森林檢測每個特征的重要性及每個樣例屬于哪個類的概率)...

#In the next recipe, well look at how to tune the random forest classifier. #Lets start by importing datasets:from sklearn import datasets X, y datasets.make_classification(1000)# X(1000,20) #y(1000) 取值范圍【0,1】from sklearn.ensemble import RandomFores…

單因素方差分析_基于R語言開展方差分析(一)——單因素方差分析

基本原理方差分析(Analysis of variance, ANOVA)是用于兩個或兩個以上樣本均數比較的方法&#xff0c;還可以分析兩個或多個研究因素的交互交互作用以及回歸方程的線性假設檢驗等。其基本思想是將全部觀察值間的變異——總變異按設計和需要分解成兩個或多個組成部分&#xff0c…

個稅10% 人群_人群管理如何使我們的搜索質量提高27%

個稅10% 人群by Thanesh Sunthar由塔內什桑塔爾(Thanesh Sunthar) 人群管理如何使我們的搜索質量提高27&#xff05; (How Crowd Curation Improved Our Search Quality by 27%) The bigger your platform gets, the more vital search becomes. And if you run a content-hea…

mysql增數據語句_Mysql 數據增刪改查語句

插入數據 insert#1. 插入完整數據(順序插入)#語法一&#xff1a;insert into 表名(字段1,字段2,字段3…字段n) values (值1,值2,值3…值n);#語法二&#xff1a;insert into 表名 values (值1,值2,值3…值n);#2. 指定字段插入數據#語法&#xff1a;insert into 表名(字段1,字段2…

Python+Flask.0010.FLASK即插視圖之自定義視圖類及修飾器

2019獨角獸企業重金招聘Python工程師標準>>> 即插視圖; 說明: FLASK的視圖靈感來自于DJANGO的基于類而非基于函數的通用視圖,主要目的是為了解決多個視圖函數之間已經實現的部分,通過類繼承的方式繼承到其它視圖,總之為了一點,就是少寫代碼,然后通過add_url_rule讓我…

InputStream和Reader,FileInputStream和 FileReader的區別

一、InputStream和Reader的區別 InputStream和Reader都可以用來讀數據(從文件中讀取數據或從Socket中讀取數據)&#xff0c;最主要的區別如下: InputStream用來讀取二進制數(字節流)&#xff0c;而 Reader用來讀取文本數據&#xff0c;即 Unicode字符。那么二進制數與文本數據有…

NGUI之輸入文本框的使用

ToolBar中的兩個紅圈 另&#xff0c;代碼如下&#xff1a;只需要定義一個變量即可&#xff0c;然后將控件drag到那里&#xff0c;真的是灰常方便呀 還有一個就是保存了&#xff08;OK的響應&#xff09;,可以簡單地理解為存檔或讀檔 轉載于:https://www.cnblogs.com/YTYMblog/p…

ae制作數據可視化_我如何精心制作真正可怕的數據可視化

ae制作數據可視化by Krist Wongsuphasawat克里斯特旺蘇帕薩瓦(Krist Wongsuphasawat) 我如何精心制作真正可怕的數據可視化 (How I carefully crafted a truly terrible data visualization) Yes, you read that right. I am going to explain how I put together a really ba…

tensorrt輕松部署高性能dnn推理_實戰教程:TensorRT中遞歸神經網絡的介紹(中文字幕)...

NVIDIA TensorRT是一個高性能的深度學習推理優化器和運行時&#xff0c;它提供低延遲和高吞吐量。TensorRT可以從每個深度學習框架導入經過訓練的模型&#xff0c;從而輕松地創建可以集成到大型應用程序和服務中的高效推理引擎。這個視頻的五個關鍵點:1.TensorRT支持RNNv2, Mat…

w怎么接顯示 樹莓派zero_純干貨!一根線玩轉樹莓派ZeroW(圖文教程,親測有效)...

#一、寫在前面本文旨在介紹如何用最少的外設(成本)完成樹莓派Zero W最基礎最重要的功能。注意&#xff1a;本文原始發表時官方鏡像版本是2017-04-10的&#xff0c;在2019年5月10日有網友提出本方案已經不完全適用最新的鏡像了&#xff0c;所以如果只是想按照本文所提出的步驟一…

十進制小數轉換二進制的問題

2019獨角獸企業重金招聘Python工程師標準>>> 整數和小數分別轉換。 整數除以2&#xff0c;商繼續除以2&#xff0c;得到0為止&#xff0c;將余數逆序排列。 22 / 2 11 余0 11/2 5 余 1 5 /2 2 余 1 2 /2 1 余 0 1 /2 0 余 1 所以22的二進制…

java操作mongodb(連接池)(轉)

原文鏈接&#xff1a; java操作mongodb&#xff08;連接池&#xff09; Mongo的實例其實就是一個數據庫連接池&#xff0c;這個連接池里默認有10個鏈接。我們沒有必要重新實現這個鏈接池&#xff0c;但是我們可以更改這個連接池的配置。因為Mongo的實例就是一個連接池&#xff…

機器學習 一年入門_我作為自我入門程序員的一年回顧

機器學習 一年入門by Alin Rauta通過Alin Rauta 我作為自我入門程序員的一年回顧 (My Year as a Self-starter Programmer in Review) This was the most crucial year for my personal development ever. It was hard. Really hard. That’s why for me, the key word of 201…

聲卡突然聽不到監聽_音樂人/鍵盤手伴侶物問題之:專業監聽音箱的音質必須用獨立聲卡...

近日&#xff0c;不少朋友在后臺留言&#xff0c;詢問專業監聽音箱連電腦聽音樂要不要接個聲卡&#xff01;本期我們針對此問題&#xff0c;跟大家分享一些心得與經驗。先回答問題&#xff0c;當然要&#xff01;通常我們電腦上的音頻輸出口是這樣的&#xff1a;而專業監聽音箱…

helm3安裝mysql_Helm3(kubernetes包管理工具)安裝使用踩坑指南

image.png從結構中我們看到有不同級別的文件夾&#xff0c;以及一些yaml文件。charts&#xff1a; 用于存放其他依賴和關聯的chart。例如應用依賴數據庫的chart。Chart.yaml&#xff1a;存儲一些元數據&#xff0c;例如chart的信息&#xff0c;描述等等templates文件夾&#xf…