復活!qwq
【背景描述】
不是所有王子都會遇見自己的中關村,主公,公主。
從前有個王子姓王,王王子遇到了一位美麗的公主,她的名字當然是公公主啦。
王王子對公公主一見鐘情,他想方設法地去討好公公主, 他準備了n個節目依次表演給公主看,每個節目他可以倒立表演,或者正常表演。王王子非常聰明,所以他總是能預估出每個節目的每種表演形式能刷多少好感度,我們記第i個節目倒立表演能增加ai的好感度,正常表演能增加bi的好感度。
這個公公主也不是乙個省油的燈,他(沒打錯)看節目的時候既不喜歡太循規蹈矩,也不喜歡太標新立異。準確的說,他看的王子表演的任意連續k個節目裡面,至少有p個倒立表演的節目,q個正常表演的節目。
王王子想知道,在滿足公公主的特殊癖好的前提下,他最多能刷多少的好感度。
【輸入資料】
第一行四個整數n,k,p,q。
接下來n行每行兩個整數表示ai和bi。
【輸出資料】
一行乙個正整數表示答案。
【資料規模】
對於 20% 的資料,n < 16。
對於另外 30% 的資料, k < 10。
對於另外 30% 的資料, ai, bi < 4
對於 100% 的資料, 0 < n < 200, 0 < ai, bi < 10000000, 0 ≤ p + q ≤ k ≤ n。
這種鬼畜題面和資料範圍肯定就是網路流啦~
題目中一共有$n-k+1$個限制區間,顯然乙個節目倒立表演的話所有包含它的區間倒立表演的機會都少了乙個;
那麼可以把每個區間看成乙個點,乙個流量就表示一次倒立表演的機會,那麼乙個節目就會對應從最前的乙個包含它的區間到最前的乙個不包含它的區間的一條邊,表示如果倒立表演,這些區間的機會都會減少乙個(流量流掉了);
限制倒立的節目最多有多少個就相當於限制總流量,直接限制每個點到下乙個點的邊的流量即可;
加上最優的限制條件可以考慮先全選$a_i$,然後把費用設成$a_i-b_i$;
然後就是費用流隨便跑了。
1 #include2 #include3 #include4 #include5 #include6 #include7#define inf 2147483647
8#define eps 1e-9
9using
namespace
std;
10 typedef long
long
ll;11
struct
edgea[100001
];14
int n,k,p,q,ans=0,n,vs,vt,tot=1,head[50001],sp[50001],fr[50001],s1[201],s2[201
];15
bool isin[50001
];16
void add(int u,int v,int w,int
z)28
bool
spfa()49}
50}51}
52if(sp[vt]==-inf)return
false;53
for(int i=vt;i!=vs;i=a[fr[i]^1
].v)
56for(int i=vt;i!=vs;i=a[fr[i]^1
].v)
61return
true;62
}63intmain()
70 vs=0
;71 vt=n+1
;72 n=n+2
;73 add(vs,n,k-q,0
);74
for(int i=1;i<=k;i++)
77for(int i=1;i<=n;i++)
82while
(spfa());
83 printf("%d"
,ans);
84return0;
85 }
XSY1081 隨機儲存器 網路流
bob有2n 位元組的記憶體,編號為 0 2n 1 他想對每個位元組的記憶體分別分配乙個值。對於編號為 i 的記憶體,如果它被分配了乙個值j 0 j 2m 那麼該位元組產生的基本歡樂值為wi j。更歡樂的是,每乙個位元組還有乙個臨界值ci 對於兩個不同的位元組,編號分別為a,b a,如果以下兩個條件...
CQOI2012 交換棋子 網路流 費用流
有乙個n行 m列的黑白棋盤,你每次可以交換兩個相鄰格仔 相鄰是指有公共邊或公共頂點 中的棋子,最終達到目標狀態。要求第i行第j列的格仔只能參與mi j次交換。第一行包含兩個整數n,m 1 n,m 20 以下n 行為初始狀態,每行為乙個包含 m個字元的 01串,其中 0表示黑色棋子,1表示白色棋子。以...
BJOI2006 狼抓兔子(網路流)
現在小朋友們最喜歡的 喜羊羊與灰太狼 話說灰太狼抓羊不到,但抓兔子還是比較在行的,而且現在的兔子還比較笨,它們只有兩個窩,現在你做為狼王,面對下面這樣乙個網格的地形 左上角點為 1,1 右下角點為 n,m 上圖中n 3,m 4 有以下三種型別的道路 1 x,y x 1,y 2 x,y x,y 1 3...