放假啦
3272 Problem A Cow Traffic
由于題目是TOPO有序圖 直接DP一次拿到每個(gè)點(diǎn)的到達(dá)路徑條數(shù) dp[i]
然后將所有有向邊反向 再做一次DP即得從BARN到每個(gè)點(diǎn)的路徑條數(shù) rdp[i]
枚舉所有邊(u,v) 記錄dp[u] * rdp[i]的最大值即可
3273 Problem B Monthly Expense
二分枚舉答案
3274 Problem C Gold Balanced Lineup
HASH來做 我用排序做超時(shí)了.. Hash AC
由于中間把Node的大小定義operator<()中最后一行寫成了return true 一直拿不到正確答案... 原來自己定義map元素大小的時(shí)候相等情況應(yīng)該定義為false 我的理解是屬于大于等于的范疇
Code follows:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

3275 Problem D Ranking the Cows
首先可以看出詢問的上界是所有的不連通的節(jié)點(diǎn)數(shù) 因?yàn)橹灰縬uery一次就可以全部得到順序
然后我們可以證明其下界也是這個(gè) 因?yàn)槭聦?shí)上只要這兩個(gè)節(jié)點(diǎn)在大小序列中相鄰 那么他們必須被詢問一次
所以我們只要做DFS就可以找出不連通的節(jié)點(diǎn)對(duì)數(shù)
3277 Problem F City Horizon
首先對(duì)Y方向做離散化(注意不要用map 容易超時(shí)-_-||| 我就超了)
接著構(gòu)建線段數(shù)(區(qū)間為0-Y方向點(diǎn)的個(gè)數(shù))
然后從左到右掃描 每碰到一個(gè)矩形的左豎線就添加到線段數(shù) 右豎線則刪除 面積 += 掃描間距 * 線段數(shù)的測度
3278 Problem G Catch That Cow
BFS
3279 Problem H Fliptile
枚舉第一行狀態(tài)2^m
可以遞推出下面所有行的狀態(tài)
時(shí)間復(fù)雜度o(2^m * n)
注意用位運(yùn)算壓縮
3280 Cheapest Palindrome
觀察可知 其實(shí)插入一個(gè)字符串在最優(yōu)插入情況下可以看作是刪除一個(gè)字符(想想為什么?)
這樣就可以得到每個(gè)字符的刪除耗費(fèi)
然后可以得到一個(gè)和LCS有些像的方程
dp[i, j] = Min( dp[i+1, j] + cost[word[j]], dp[i, j-1] + cost[word[i]], dp[i+1, j-1]->(if(word[i] == word[j]));
找出最開始的那個(gè)結(jié)論就可以了
3281 Problem J Dining
最大流
從題目描述中比較容易看出網(wǎng)絡(luò)流可能出解 剩下的就是構(gòu)造圖
我們看到對(duì)于一個(gè)Cow來說 其必須在滿足Food和Drink皆滿意的情況下才能算做滿意 因此比較好的構(gòu)圖方法是將Food和Drink分別與源點(diǎn)和匯點(diǎn)相連 將cow放在中間 并把點(diǎn)權(quán)換成邊權(quán)(即將每一個(gè)cow節(jié)點(diǎn)一分為2 將點(diǎn)權(quán)放到2點(diǎn)的連邊上) 所有權(quán)全部設(shè)成1 RUN一次最大流 這種圖有時(shí)候也叫做三分圖