題意:懶得寫了......
解:一開始想的是每天建點,每種人建點,然後連邊費用流,發現乙個人可以管轄多天,不好處理。
回想起了網路流24題中的"最長k可重線段集","最長k可重區間集"等問題,然後發現這題也可以橫著流啊。
具體來說,首先在下面開一條安全快速綠色通道,存放那些不用的人(流量)。
那麼每天要用怎麼辦?把人逼出去!
流量設為inf - ai就可以逼出去ai個人了!
然後每種人都對應一段區間,連邊跑最小費用最大流即可。
1 #include 2 #include 3 #include 4 #include 5ac**6const
int n = 1010, m = 1000010, inf = 0x3f3f3f3f;7
8struct
edge edge[m << 1]; int top = 1;11
12int
e[n], d[n], vis[n], pre[n], flow[n];
13 std::queueq;
1415 inline void add(int x, int y, int z, int
w) 31
32 inline bool spfa(int s, int
t) 52}53
}54}55
return d[t]
5758 inline void update(int s, int
t) 66
return;67
}6869 inline int solve(int s, int t, int &cost)
77return
ans;78}
7980
intmain()
87for(int i = 1, x, y, z; i <= m; i++)
91int s = n + 2
;92 add(s, 1, inf, 0
);93
intans;
94 solve(s, n + 1
, ans);
95 printf("%d"
, ans);
96return0;
97 }
題外話:a了之後我自以為建圖很奇葩,跑去看題解,發現都是這種解法......
還可以用線性規劃做...好神奇啊。
洛谷 P3980 NOI2008 志願者招募
我居然現在才會用費用流解線性規劃 當然這裡解決的一類問題比較特殊 以式子作為點,變數作為邊,然後要求就是變數在不同的式子裡出現了兩次,係數一次為 1,一次為 1 這樣的話就作為了乙個出度和乙個入度,和邊正好對應了 我們設每種志願者選擇人數是 x 我們的限制是 left x geq 0 x x geq...
luogu3980 志願者招募
又一次考試網路流爆零.這一題一看就是網路流,但是要怎麼構圖呢?考慮到途中的一些因素,首先,每一種志願者控制的區間範圍為 s 到 t 所以,我們要使得每種志願者只能控制這段區間,其他的不能夠控制,其次,每個時間都有乙個最小的值,也就是這條邊 我們將時間段看為一條邊更加方便 有乙個下界,想到了什麼,上下...
P3980 NOI2008 志願者招募 網路流
題意 一共有n 天 每天需要ai個志願者 有m種志願者 每種志願者可以從 第si 天工作到ti 天 每個需要ci元 問花最少的錢滿足每天的需求 顯然是費用流 如果正常連邊的話 每個志願者對其輻射的天非常難處理 可以採用時間軸的連法 源點連第一天 匯點連最後一天 容量為inf費用為0 這樣跑網路流是沿...