洛谷P3980 志願者招募

2022-04-30 11:24:08 字數 1201 閱讀 1241

題意:懶得寫了......

解:一開始想的是每天建點,每種人建點,然後連邊費用流,發現乙個人可以管轄多天,不好處理。

回想起了網路流24題中的"最長k可重線段集","最長k可重區間集"等問題,然後發現這題也可以橫著流啊。

具體來說,首先在下面開一條安全快速綠色通道,存放那些不用的人(流量)。

那麼每天要用怎麼辦?把人逼出去!

流量設為inf - ai就可以逼出去ai個人了!

然後每種人都對應一段區間,連邊跑最小費用最大流即可。

1 #include 2 #include 3 #include 4 #include 5

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 }

ac**

題外話: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 這樣跑網路流是沿...