網絡流

[+]
  1. POJ 3013 - Big Christmas Tree基礎 AC
  2. POJ 3463 - Sightseeing中等 AC
  3. POJ 3613 - Cow Relays較難 AC
  4. POJ 3621 - Sightseeing Cows中等 AC
  5. POJ 3635 - full tank中等 AC
  6. 生成樹問題
    1. POJ 1639 - Picnic Planning較難AC
    2. POJ 1679 - The Unique MST基礎 AC
    3. POJ 2728 - Desert King中等 AC
    4. POJ 3164 - Command Network難AC
    5. POJ 3522 - Slim Span基礎 AC
  7. 連通性度數拓撲問題
    1. POJ 1236 - Network of Schools基礎 AC
    2. POJ 1659 - Frogs Neighborhood基礎AC
    3. POJ 2553 - The Bottom of a Graph基礎 AC 好題
    4. POJ 2762 - Going from u to v or from v to u中等AC
    5. POJ 2914 - Minimum Cut難AC 難
    6. POJ 2942 - Knights of the Round Table難AC
    7. POJ 3177 - Redundant Paths中等AC
    8. POJ 3352 - Road Construction中等AC
    9. POJ 3249 - Test for Job基礎
    10. POJ 3592 - Instantaneous Transference基礎AC
    11. POJ 3687 - Labeling Balls中等 AC 莫名其妙有空再重新看
    12. POJ 3694 - Network中等AC
  8. -SAT問題
    1. POJ 2723 - Get Luffy Out中等AC 好題
    2. POJ 2749 - Building roads較難AC
    3. POJ 3207 - Ikkis Story IV - Pandas Trick基礎AC
    4. POJ 3648- Wedding中等AC
    5. POJ 3678 - Katu Puzzle基礎AC
    6. POJ 3683 - Priest Johns Busiest Day中等AC
    7. POJ 2296Map Labeler中等 第七道AC
    8. 解法 建好矛盾直接就是2-SAT
    9. 最大流問題
    10. POJ 1149 - PIGS較難AC 灰常好題強烈推薦
    11. POJ 1273 - Drainage Ditches基礎AC
    12. POJ 1459 - Power Network基礎AC
    13. POJ 1637 - Sightseeing tourCrazyAC
    14. POJ 1815 - Friendship中等AC
    15. POJ 1966 - Cable TV Network中等AC
    16. POJ 2112 - Optimal Milking基礎AC 好題
    17. POJ 2391 - Ombrophobic Bovines中等AC 好題
    18. POJ 2396 - Budget中等
  9. 最小割模型在競賽中的應用
    1. POJ 2455 - Secret Milking Machine基礎AC 好題
    2. POJ 2699 - The Maximum Number of Strong Kings較難
    3. POJ 2987 - Firing較難AC 經典
    4. RQNOJ 最大獲利Profit中等AC 經典
    5. ZOJ 2071 - Technology Trader AC
    6. POJ 3084 - Panic Room中等好題
    7. POJ 3155 - Hard Life很挑戰一題AC 難
    8. POJ 3189 - Steady Cow Assignment中等AC
    9. POJ 3204 - Ikkis Story I - Road Reconstruction基礎
    10. ZOJ 2532 - Internship基礎
    11. POJ 3308 - Paratroopers較難
    12. POJ 2125 - Destroying The Graph難
    13. POJ 3469 - Dual Core CPU中等
    14. POJ 3498 - March of the Penguins中等
    15. ZOJ 2587 - Unique Attack較難
    16. SPOJ 839 - Optimal Marks難
    17. SGU 326 - Perspective中等
  10. 費用流問題
    1. POJ 2175 - Evacuation Plan中等
    2. POJ 3422 - Kakas Matrix Travels中等
    3. POJ 3680 - Intervals較難
    4. SPOJ 371 - Boxes簡單
    5. SGU 185 - Two shortest中等
  11. 匹配問題
    1. POJ 1486 - Sorting Slides中等AC
    2. POJ 1904 - Kings Quest中等好題AC
    3. POJ 2060 -Taxi Cab Scheme基礎AC
    4. POJ 2594 -Treasure Exploration中等AC
    5. POJ 3041 - Asteroids基礎AC
    6. POJ 2226 - Muddy Fields基礎AC
    7. POJ 2195 - Going Home基礎AC
    8. POJ 2400 - Supervisor Supervisee中等AC
    9. POJ 2516 -Minimum Cost中等AC
    10. POJ 3686 - The Windys較難AC
    11. SPOJ 412 - K-path cover較難
    12. SGU 206 Roads較難
  12. NP問題
    1. POJ 1419 - Graph Coloring基礎
    2. POJ 2989 - All Friends難
    3. ZOJ 1492 - Maximum Clique基礎AC
  13. 其他
    1. POJ 1470 - Closest Common Ancestors基礎
    2. POJ 1985 - Cow Marathon基礎
    3. POJ 1986 - Distance Queries中等
    4. HOJ 11192 - Justice League有趣的圖論
    5. HOJ 11277 - New Island有趣的圖論

POJ 2449 Remmarguts' Date(中等)  AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=2449

題意:經典問題:K短路

解法:dijkstra+A*(rec),方法很多

相關:http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1144

該題亦放在搜索推薦題中

POJ 3013 - Big Christmas Tree(基礎)  AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3013

題意:最簡單最短路,但此題要過,需要較好的程序速度和,還要注意精度

解法:Dijkstra

POJ 3463 - Sightseeing(中等)  AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3463

題意:最短路和比最短路大1的路的數量

解法:需要真正理解dijkstra

POJ 3613 - Cow Relays(較難)  AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3613

題意:求經過N條邊的最短路

解法:floyd + 倍增,貪心

POJ 3621 - Sightseeing Cows(中等)  AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3621

題意:求一個環路,歡樂值 / 總路徑最大

解法:參數搜索 + 最短路(ms 原始的bellman tle, 用spfa才過)

POJ 3635 - full tank?(中等)  AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3635

題意:最短路變形

解法:廣搜

相關:http://hi.baidu.com/hnu_reason/blog/item/086e3dccfc8cb21600e9286b.html


生成樹問題

基本的生成樹就不放上來了

POJ 1639 - Picnic Planning(較難) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=1639

題意:頂點度數有限制的最小生成樹

解法:貪心 + prim/kruskal

POJ 1679 - The Unique MST(基礎)  AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=1679

題意:判斷MST是否唯一

解法:prim就行,不過還是易錯的題

POJ 2728 - Desert King(中等)  AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=2728

題意:所謂最優比率生成樹

解法:參數搜索 + prim

POJ 3164 - Command Network(難) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3164

題意:最小樹形圖

解法:劉朱算法,這個考到的可能性比較小吧?

POJ 3522 - Slim Span(基礎)  AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3522

題意:求一顆生成樹,讓最大邊最小邊差值最小

解法:kruskal活用


連通性,度數,拓撲問題

此類問題主要牽扯到DFS,縮點等技巧

POJ 1236 - Network of Schools(基礎)  AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=1236

題意:問添加多少邊可成爲完全連通圖

解法:縮點,看度數

POJ 1659 - Frogs' Neighborhood(基礎) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=1659

題意:根據度序列構造圖

解法:貪心,詳細證明參見havel定理

POJ 2553 - The Bottom of a Graph(基礎)  AC  (好題)

http://acm.pku.edu.cn/JudgeOnline/problem?id=2553

出度爲0的強連通分量的所有的點

POJ 2186 - Popular Cows(基礎)  AC  (好題)

http://acm.pku.edu.cn/JudgeOnline/problem?id=2186

題意:強連通分量縮點圖出度爲0的點

POJ 2762 - Going from u to v or from v to u?(中等) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=2762

題意:單向連通圖判定

解法:縮點 + dp找最長鏈 (我是用 縮點+ 歐拉路判斷,最後證明這方法是錯的)

POJ 2914 - Minimum Cut(難) AC  (難)

http://acm.pku.edu.cn/JudgeOnline/problem?id=2914

題意:無向圖最小割

解法:Stoer-Wagner算法,用網絡流加枚舉判定會掛

POJ 2942 - Knights of the Round Table(難) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=2942

題意:求雙聯通分量(或稱塊)中是否含奇圈

解法:求出雙連通分量後做黑白染色進行二分圖圖判定

相關:http://hi.baidu.com/zfy0701/blog/item/57ada7ed104ce9d2b31cb104.html

POJ 3177 - Redundant Paths(中等) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3177 (和3352一樣)

題意:添加多少條邊可成爲雙向連通圖任意兩點間有兩條不共邊的路徑

解法:把割邊分開的不同分量縮點構樹,看入度

公式: 入度爲1的leaf個數, ( leaf + 1 ) / 2

POJ 3352 - Road Construction(中等) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3352 (和3177一樣)

題意:添加多少條邊可成爲雙向連通圖(當刪除任意一條邊的時候,圖還保持連通性)

解法:把割邊分開的不同分量縮點構樹,看入度 ( leaf + 1 ) / 2

建議對比下1236,有向圖添加多少條邊變成強連通圖

POJ 3249 - Test for Job(基礎)

http://acm.pku.edu.cn/JudgeOnline/problem?id=3249

解法:bfs / dfs + dp

POJ 3592 - Instantaneous Transference(基礎) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3592

解法:縮點,最長路,少人做的水題,注意細節 (和 3160 類似)

POJ 3687 - Labeling Balls(中等)  AC  (莫名其妙,有空再重新看)

http://acm.pku.edu.cn/JudgeOnline/problem?id=3687

解法:拓撲排序

POJ 3694 - Network(中等) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3694

解法:雙連通分量+並查集


2-SAT問題

此類問題理解合取式的含義就不難

POJ 2723 - Get Luffy Out(中等) AC (好題)

http://acm.pku.edu.cn/JudgeOnline/problem?id=2723

解法:二分 + 2-SAT判定

POJ 2749 - Building roads(較難) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=2749

解法:二分 + 2-SAT判定

POJ 3207 - Ikki's Story IV - Panda's Trick(基礎) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3207

解法:簡單的2-sat,不過其他方法更快

POJ 3648- Wedding(中等) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3648

解法:用2-sat做會比較有意思,但是暴搜照樣0ms

POJ 3678 - Katu Puzzle(基礎) AC 

http://acm.pku.edu.cn/JudgeOnline/problem?id=3678

解法:直接按合取式構圖驗證就行了(本質)

POJ 3683 - Priest John's Busiest Day(中等) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3683

解法:n^2枚舉點之間的相容性構圖,求解2-SAT (要求輸出方案)

POJ 2296 Map Labeler (中等) (第七道)AC

        http://poj.org/problem?id=2296 

        解法:上下邊形成2元關係。然後構完圖,求2-SAT

POJ 3905 Perfect Election(中等) (第八道) AC

        http://poj.org/problem?id=3905(好題!)

        解法: 建好矛盾,直接就是2-SAT


最大流問題

變形很多,最小割最大流定理的理解是關鍵

POJ 1149 - PIGS(較難) AC  (灰常好題!強烈推薦)

http://acm.pku.edu.cn/JudgeOnline/problem?id=1149

絕對經典的構圖題

POJ 1273 - Drainage Ditches(基礎) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=1273

最大流入門

POJ 1459 - Power Network(基礎) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=1459

基本構圖

POJ 1637 - Sightseeing tour(Crazy) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=1637

題意:求混合圖的歐拉跡是否存在

解法:無向邊任意定向,構圖,詳建黑書P324

POJ 1815 - Friendship(中等) AC

http://acm.pku.edu.cn/JudgeOnline/problem?i1d=815

題意:求最小點割

解法:拆點轉換爲邊割

相關:http://hi.baidu.com/zfy0701/blog/item/a521f230b06dea9fa9018e0e.html

POJ 1966 - Cable TV Network(中等) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=1966

題意:去掉多少點讓圖不連通

解法:任定一源點,枚舉匯點求點割集(轉換到求邊割),求其中最小的點割

POJ 2112 - Optimal Milking(基礎) AC  (好題)

http://acm.pku.edu.cn/JudgeOnline/problem?id=2112

二分枚舉,最大流

POJ 2391 - Ombrophobic Bovines(中等) AC  (好題)

http://acm.pku.edu.cn/JudgeOnline/problem?id=2391

題意:floyd, 拆點,二分枚舉

相關:http://hi.baidu.com/zfy0701/blog/item/3e0006c4f73f0eaf8226acff.html

POJ 2396 - Budget(中等)

http://acm.pku.edu.cn/JudgeOnline/problem?id=2396

題意:有源匯的上下界可行流

解法:用矩陣-網絡流模型構圖,然後拆邊

相關:http://hi.baidu.com/zfy0701/blog/item/6449d82a64e15e3e5343c1ba.html


最小割模型在競賽中的應用

POJ 2455 - Secret Milking Machine(基礎) AC   (好題)

http://acm.pku.edu.cn/JudgeOnline/problem?id=2455

二分枚舉,一般來說需要寫對邊容量的更新操作而不是每次全部重新構圖

POJ 2699 - The Maximum Number of Strong Kings(較難)

http://acm.pku.edu.cn/JudgeOnline/problem?id=2699

解法:枚舉人數 + 最大流(感謝xpcnq_71大牛的建圖的提示)

POJ 2987 - Firing(較難)  AC  (經典)

http://acm.pku.edu.cn/JudgeOnline/problem?id=2987

題意:最大權閉包

解法:先邊權放大,第一問總量-最大流,第二問求最小割

相關:http://wywcgs.spaces.live.com/blog/cns!4D861A02A3382142!1109.entry?&_c02_owner=1

RQNOJ 最大獲利Profit(中等) AC  (經典)

http://www.rqnoj.cn/Problem_556.html

最大權閉包圖的特殊情況

ZOJ 2071 - Technology Trader  AC

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2071

也是此類型,最大權閉包圖。 多加了輸出 買哪些組件,使效益最大。

POJ 3084 - Panic Room(中等,好題)

http://acm.pku.edu.cn/JudgeOnline/problem?id=3084

題意:略

解法:根據最小割建模

POJ 3155 - Hard Life(很挑戰一題) AC  (難)

http://acm.pku.edu.cn/JudgeOnline/problem?id=3155

題意:最大密度子圖

解法:參數搜索 + 最大權閉合圖,A.V.Goldberg的論文(nb解法)

最小割模型在信息學競賽中的應用 一文中也有講

POJ 3189 - Steady Cow Assignment(中等) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3189

題意:尋找最小的區間完成匹配

解法:這題充分說明SAP的強大,純暴力可過。更好的方法是在枚舉區間的過程中不斷刪邊和加邊繼續網絡流過程

POJ 3204 - Ikki's Story I - Road Reconstruction(基礎)

http://acm.pku.edu.cn/JudgeOnline/problem?id=3204

ZOJ 2532 - Internship(基礎)

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2532

題意:確定邊是否是某個割中的邊

解法:兩邊dfs求割, 或暴力枚舉(需要寫取消某條增廣路的操作(但數據弱,也許不取消也能混過))

POJ 3308 - Paratroopers(較難)

http://acm.pku.edu.cn/JudgeOnline/problem?id=3308

POJ 2125 - Destroying The Graph(難)

http://acm.pku.edu.cn/JudgeOnline/problem?id=2125

題意:最小點權覆蓋

POJ 3469 - Dual Core CPU(中等)

http://acm.pku.edu.cn/JudgeOnline/problem?id=3469

題意:最小割

POJ 3498 - March of the Penguins(中等)

http://acm.pku.edu.cn/JudgeOnline/problem?id=3498

題意:滿足點容量限制的網絡流

解法:拆點把點容量轉換爲邊容量,枚舉匯點

ZOJ 2587 - Unique Attack(較難)

http://acm.zju.edu.cn/show_problem.php?pid=2587

題意:確定最小割是否是唯一的

解法:得理解dfs求最小割算法的本質

SPOJ 839 - Optimal Marks(難)

http://www.spoj.pl/problems/OPTM/

題意:略

解法:很經典哦,見amber的集訓隊論文,根據標號的每一位求最小割

SGU 326 - Perspective(中等)

http://acm.sgu.ru/problem.php?c0&problem=326

比較經典的構圖法


費用流問題

可以KM解的就不放在這裏,另外,感覺除非很特殊的圖,一般用連續增廣路的算法就夠了

POJ 2175 - Evacuation Plan(中等)

http://acm.pku.edu.cn/JudgeOnline/problem?id=2175

題意:判斷是否給定解是最優解,比較陰的一題

解法:根據給出的計劃構造流,然後消且只消一次負圈

POJ 3422 - Kaka's Matrix Travels(中等)

http://acm.pku.edu.cn/JudgeOnline/problem?id=3422

題意:略

解法:拆點

POJ 3680 - Intervals(較難)

http://acm.pku.edu.cn/JudgeOnline/problem?id=3680

題意:略,這題還是蠻經典

解法:discuss中比較詳細

SPOJ 371 - Boxes(簡單)

http://www.spoj.pl/problems/BOXES/

題意:略

解法:費用流,但似乎有比網絡流更好的做法

SGU 185 - Two shortest(中等)

http://acm.sgu.ru/problem.php?c0&problem=185

題意:求兩條不想交的最短路徑

解法:費用流,也可以最短路 + 最大流。


匹配問題

正確理解KM算法是很重要的

這裏我還要說幾句:最正確解最小權匹配的辦法是用一個很大的數-當前邊權值,而不是直接對邊權取反(這樣只能處理左右點相等的完全二分圖,即K(n, n)

以上有可能還是說的有點問題,以後補充

POJ 1486 - Sorting Slides(中等) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=1486

題意:二分圖的必須邊

解法:需正真理解最大匹配算法,詳見http://hi.baidu.com/kevin0602/blog/item/1d5be63b5bec9bec14cecb44.html

POJ 1904 - King's Quest(中等,好題) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=1904

題意:求二分圖所有可能的匹配邊

解法:雖然最終不是用匹配算法,但需要理解匹配的思想轉換成強連通分量問題。

POJ 2060 -Taxi Cab Scheme(基礎) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=2060

題意:最小路徑覆蓋

POJ 2594 -Treasure Exploration(中等) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=2594

題意:可相交最小路徑覆蓋

解法:先傳遞閉包轉化下

POJ 3041 - Asteroids(基礎) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3041

解法: 簡單行列匹配 

POJ 2226 - Muddy Fields(基礎) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=2226

題意:行列的覆蓋

解法:最小點集覆蓋 = 最大匹配

POJ 2195 - Going Home(基礎) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=2195

題意:最小權值匹配

解法:KM算法

POJ 2400 - Supervisor, Supervisee(中等) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=2400

題意:輸出所有最小權匹配

解法:KM, 然後回溯解,汗,輸入的兩個矩陣居然是反過來的

POJ 2516 -Minimum Cost(中等) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=2516

題意:最小權值匹配或最小費用流

解法:拆點 + KM算法(只有正確的才能過),費用流(ms錯的可能也能過)

POJ 3686 - The Windy's(較難) AC

http://acm.pku.edu.cn/JudgeOnline/problem?id=3686

題意:最小權值匹配

解法:拆點,然後儘管用KM算法去水吧,數據其實弱得不得了 O(50 * 50 * 2500) -> 16ms

相關:http://hi.baidu.com/kevin0602/blog/item/2829dc01d7143b087bec2c97.html

SPOJ 412 - K-path cover(較難)

https://www.spoj.pl/problems/COVER/

題意:略

解法:很牛叉的一道匹配

相關:http://hi.baidu.com/roba/blog/item/c842fdfac10d24dcb48f31d7.html

SGU 206. Roads(較難)

http://acm.sgu.ru/problem.php?c0&problem=206

解法:經典題目,也可以使用spoj 412那題的優化


NP問題

一般是搜索或dp解的

POJ 1419 - Graph Coloring(基礎)

http://acm.pku.edu.cn/JudgeOnline/problem?id=1419

題意:圖的着色

解法:搜索,可惜題目的數據真是太弱了

POJ 2989 - All Friends(難)

http://acm.pku.edu.cn/JudgeOnline/problem?id=2989

題意:極大團數量

解法:開始狂tle, 後來找了論文:Finding All Cliques of an Undirected Graph(Coen Bron & Joep Kerboscht)

ZOJ 1492 - Maximum Clique(基礎) AC

http://acm.zju.edu.cn/show_problem.php?pid=1492

題意:圖的最大團

解法:搜索,如果要求速度,可參考下相應論文


其他

不能成大類的

POJ 1470 - Closest Common Ancestors(基礎)

http://acm.pku.edu.cn/JudgeOnline/problem?id=1470

題意:LCA問題

解法:tarjan或RMQ,另外輸入很噁心

POJ 1985 - Cow Marathon(基礎)

http://acm.pku.edu.cn/JudgeOnline/problem?id=1985

題意:樹上的最長路徑

解法:dp

POJ 1986 - Distance Queries(中等)

http://acm.pku.edu.cn/JudgeOnline/problem?id=1986

題意:LCA

解法:tarjan或RMQ

HOJ 11192 - Justice League(有趣的圖論)

http://acm.hnu.cn:8080/online/?action=problem&type=show&id=11192&courseid=99

HOJ 11277 - New Island(有趣的圖論)

http://acm.hnu.cn:8080/online/?action=problem&type=show&id=11277&courseid=109

本文轉載自: http://blog.csdn.net/logic_nut/archive/2009/08/27/4491326.aspx


====================================================================================================


1062* 昂貴的

解法:枚舉等級限制+最短路 

            交易過程中等級最高和最低的差小於m

1087* A Plug for UNIX (HDU1526)

解法:2分匹配

           調製器無限,用floyd傳遞插口轉換,然後就是2分匹配

1094 Sorting It All Out

          解法:floyd + 拓撲排序

                         先用floyd判斷自環(或用Tarjan,拓撲判斷是否能確定序列

1112* Team Them Up! 2分圖染色+DP (ZOJ1462)


1125 Stockbroker Grapevine

解法:floyd

            FLOYD,然後求每個點到其他點的最短時間和

1135 Domino Effect  (ZOJ1298)

題意:有n個關鍵骨牌 (1 <= n < 500),m列骨牌。整個多米諾骨牌圖是聯通的。

            m列骨牌描述如下:a,b,i,表示這排骨牌是在關鍵骨牌a到b之間的,從一頭到另一頭倒下需要i秒。           

            總是從n=1的骨牌開始推倒。 輸出最後倒下的骨牌的倒下時間和位置(最後倒下的是某個關鍵骨牌,或者某兩個關鍵骨牌之間)

                       數據二的圖形,可看出,最後倒的在2,3中間位置。

解法:最短路

          求出骨牌1到其他骨牌的最短路,最後倒下的是某個關鍵骨牌,或者某兩個關鍵骨牌之間

1149* PIGS

題意:有M個豬圈(M<=1000),每個豬圈裏初始時有若干頭豬

             一開始所有的豬圈都是關閉的.

             一次來了N個顧客(N<=100) , 每個顧客分別會打開指定的幾個豬圈,從中買若干頭豬

             每個顧客分別有他能夠買的數量的上限.

             每個顧客走後,他打開的豬圈中的豬可以任意給調換到其他開着的豬圈裏,然後所有豬圈從新關上.

             問:總共最多能賣出多少頭豬.

解法:分層網絡流

             可以把豬圈分層建邊,但是節點數要10W。有更優秀的建邊方法

             請移步這裏

1161* Walls

解法:floyd

      將區域作爲頂點,如果兩個區域鄰接(有公共邊),就連邊,權值爲1 

     注意:輸入區域的點的順序(順逆時針)

      以此建圖,用floyd算法算出每個頂點間的最短距離,然後就是窮舉每個頂點

      使每個俱樂部的成員到(所在村莊)達該頂點的距離之和最小

      村莊到區域的距離即:將村莊作爲點的區域(頂點)到枚舉頂點的距離

1201 Intervals

解法:差分約束

            約束條件:s[b]-s[a-1] >= c  , 0 <= s[i+1]-s[i] <= 1

1236* Network of Schools 

題意:問添加多少邊可成爲完全連通圖

解法:基礎強聯通

            縮點,看度數

1251 Jungle Roads

解法:基礎最小生成樹

1273 Drainage Ditches

解法:基礎最大流

          注意輸入時先輸邊數n,再是點數m

1274 The Perfect Stall

題意:牛和擠奶器最大匹配

解法:基礎二分匹配

1275* Cashier Employment  (神題)

解法:差分約束

            ti[i] 表示從 i 開始工作的人數 ,s[i]  表示 0-i 總共僱傭了多少人 , r[i]  表示 i 所需的至少人數

            ti[i-7]+ti[i-6]+...ti[i] >= r[i]   ( 表示前8小時開始工作的人數 )

            設:s[i]-s[i-8] = ti[i-7]+ti[i-6]+...ti[i]

            0 <= S[i]-S[i-1] <= ti[i]

           約束條件:①S[i]-S[i-1] >= 0  ②S[i-1]-S[i] >= -ti[i]

                               ③S[i]-S[i-8] >= r[i] ( i>=8 )  ④S[23]+S[a]-S[a+16] >= r[i] ( i<=7 )  ==> S[a]-S[a+16] >= r[i]-S[23]

                               ⑤*注意:S[24]-S[0]>=mid  //這句話要記得

1325 Machine Schedule

解法: 二分匹配(最小點覆蓋)

            最小點覆蓋:選取最少的點數,使這些點和所有的邊都有關聯(選擇最少的點覆蓋所有的邊)

1364 King

解法:差分約束

           gt: s[a+b]-s[a-1]>c  ==>  s[a+b]-s[a-1]>=c+1

            lt: s[a+b]-s[a-1]<c ==>  s[a-1]-s[a+b]>(-c)

            超級源點: s[i]-s[n+1] >= 0

1422 Air Raid

解法:二分匹配 (最小路徑覆蓋)

          (傘兵) 最小路徑覆蓋:用最少的不相交簡單路徑覆蓋所有結點。 

          有向圖:ans = n - match() , 無向圖: ans = n - ( match() +1 ) / 2

1459 Power Network 

解法:基礎網絡流

1466 Girls and Boys

解法:二分匹配 ( 最大獨立集 ) 

            最大獨立集 = 頂點數 - 最小點覆蓋

            由於最小點覆蓋所有邊,所以去掉這些點後,剩下的點之間就沒有關聯邊,即互相獨立

1469 COURSES  (HDU1083)

解法:二分匹配(完全匹配 )

1502 MPI Maelstrom

題意:計算從1發送信息到其他n-1個點最短時間 , 並且信息是同時發出去的

解法:最短路

            計算1到其他n-1個點的最短時間,再取最大即可(因爲信息是同時發的)

1511* Invitation Cards (HDU1535)

解法:最短路

            來回最短路(單向):  正向建邊 , 可以計算出S到任意點的最短路。

                                                反向建邊,那麼S到任意點的最短路就相當於從任意點回來S的最短路

1548 Robots

解法:二分匹配(有向無環圖的最小路徑覆蓋)

1566 The Doors

解法:計算幾何+最短路

1637* Sightseeing tour 

解法:混合歐拉回路

            單向邊:無用,刪  in[b]++ ; out[a]++

            雙向邊:隨意定向  in[b]++ ; out[a]++

          【建圖】x = in[i]-out[i] 

                           ①如果x是奇數,肯定不存在歐拉回路

                           ②如果x>0 (入>出) 連 i -> T  容量: x/2

                           ③如果x<0 (入<出) 連 S -> i  容量:-x/2         

        【判斷】是否滿流

1698 Alice's Chance

題意:有N個film,Alice想要參加所以film的主演。

給出每個film在每個星期的開拍時間,和需要拍的天數,並且給出期限日期。

問Alice是否能合理安排時間,完成所有的film的拍攝工作。

解法:多重匹配

X部爲:7*50天,Y部爲每個film.容量爲需要的天數D[i] .

建邊:對於每個film,從第一個星期開始每個星期的可以拍的時間和Y部連一條邊.一直到期限日期那一個星期結束連邊.然後求一次多重匹配.判斷是否是完美匹配.

1716 Integer Intervals 

題意:和1201一樣

解法:差分約束

             ① s[b+1]-s[a]>=2   ② 0 <= s[i+1]-s[i] <= 1 

             ③ s[i]>=0 (第③個是建超級源點的條件,這裏可以不要)

1719 Shooting Contest

題意:有r行c列的矩陣。每一列都有2個白格子。現在要求你射擊c次,使得每一列都被射擊正好一次。並且每一行至少都射擊一次。

求是否有解,並輸出每一列射擊的相應行座標。

解法:二分匹配(行列匹配)

X部爲行,Y部爲列。先進行一次行列匹配。判斷是否match() == r 。如果是,說明每一行都對應了一列。那麼剩下的未匹配的列,進行隨意行跟它匹配即可。這樣就可以使得每一行都沒匹配過,並且每一列都僅被匹配了一次。

1724* ROADS 

解法:帶限制的最短路

           方法①  將每個點拆分,開二維 dis[ i ][ j ] 記錄。表示到達節點 i 總共花費 j 的金錢所需的最短路 ( j<=K )

           方法②廣搜bfs() + 優先隊列

1734 Sightseeing trip

             解法:Floyd 求最小環 + 輸出路徑

  1. void floyd() { // 最小環模板   
  2.    int i,j,k,w,v;  
  3.    d=inf;  
  4.    for(i=1;i<=n;i++)  
  5.       for(j=1;j<=n;j++) path[i][j]=j,dis[i][j]=e[i][j];  
  6.   
  7.    for(k=1;k<=n;k++) {  
  8.   
  9.       //新增部分,求最小環   
  10.       for(i=1;i<k;i++) if(e[i][k]!=inf)  
  11.          for(j=1;j<i;j++) if(e[k][j]!=inf) {  
  12.             if(dis[i][j]==inf) continue;  
  13.             if(d>dis[i][j]+e[i][k]+e[k][j]) {  
  14.                d=dis[i][j]+e[i][k]+e[k][j];  
  15.             // 記錄路徑   
  16.                len=0; s[0]=k; v=i;  
  17.                while(v!=j) s[++len]=v,v=path[v][j];  
  18.                s[++len]=j;  
  19.             }  
  20.          }  
  21.       //通常的floyd部分   
  22.       for(i=1;i<=n;i++) if(dis[i][k]!=inf)  
  23.          for(j=1;j<=n;j++) if(dis[k][j]!=inf)  
  24.             if(dis[i][j]>dis[i][k]+dis[k][j])  
  25.                dis[i][j]=w , path[i][j]=path[i][k];  
  26.    }  
  27. }  
void floyd() { // 最小環模板
   int i,j,k,w,v;
   d=inf;
   for(i=1;i<=n;i++)
      for(j=1;j<=n;j++) path[i][j]=j,dis[i][j]=e[i][j];

   for(k=1;k<=n;k++) {

      //新增部分,求最小環
      for(i=1;i<k;i++) if(e[i][k]!=inf)
         for(j=1;j<i;j++) if(e[k][j]!=inf) {
            if(dis[i][j]==inf) continue;
            if(d>dis[i][j]+e[i][k]+e[k][j]) {
               d=dis[i][j]+e[i][k]+e[k][j];
            // 記錄路徑
               len=0; s[0]=k; v=i;
               while(v!=j) s[++len]=v,v=path[v][j];
               s[++len]=j;
            }
         }
      //通常的floyd部分
      for(i=1;i<=n;i++) if(dis[i][k]!=inf)
         for(j=1;j<=n;j++) if(dis[k][j]!=inf)
            if(dis[i][j]>dis[i][k]+dis[k][j])
               dis[i][j]=w , path[i][j]=path[i][k];
   }
}


1780* Code  (好題)

題意:要求所有的n位數編碼成一個數字串,每個n位數只出現一次

解法:歐拉回路

可以把n位數看成邊,那麼可以把它的前n-1位看成點A,後n-1一位看成點B,

那麼它就是A->B的一條邊。找一次歐拉回路就行了。

此題要用棧模擬遞歸函數!!!

1789 Truck History

解法:最小生成樹( prim 或 kruskal)

1797 Heavy Transportation 

解法:最小生成樹 或 最短路 或 dfs

            二分枚舉下限,用最小生成樹 或 最短路 或 dfs 判斷 1 和 n 是否連通

1847 Tram

解法:簡單最短路

1860 Currency Exchange

題意:貨幣兌換

解法:Bellman-Ford 判環

1904* King's Quest

解法:強連通

不是很明白...

1949 Chores

解法:最短路

            反向建圖  建立超級源點S=0 ,連接入度爲0 的點,邊權爲 0

            點 i 和  prerequisites ( j ) , i 連 j ,邊權爲 time[ i ]

            然後求最長路

            PS: 正向建邊,不知道哪裏錯了,一直TLE

2060 Taxi Cab Scheme 

解法:分匹配 (最小路徑覆蓋)

2075 Tangled in Cables 

解法:最小生成樹

2112 Optimal Milking 

解法:二分+網絡流

          二分最遠距離,建可行邊,判斷是否符合要求

2125 Destroying The Graph

解法:最小割(最小點權覆蓋)

最小點權覆蓋:最小點權覆蓋所有的邊 (等同於最大獨立集)

拆點並將點權轉成邊權。

i 和 i+n 分別表示出入,S 連 i 刪出邊的權, i+n 連 T 刪入邊的權。 求最小割。

2135 Farm Tour

題意:無向圖,從起點到終點,再從終點到起點。不能走重複的邊。求最短路程。

解法:費用流

相當於找兩條從起點到終點不重複的路徑。
S 連起點,容量2 費用0 , 
 終點連 T,容量2 費用0

拆邊:  i 連 j ,j 連 i 容量1 , 費用邊權w


2139 Six Degrees of Cowvin Bacon

題意:  類似 HDU1869 六度分離

這裏求的是以哪個人 i 爲中心,到其他人的分離度的平均值最小,求最小值

解法: Floyd

相當於求 i 到其他人的距離總和最小, 最後 avg = sum*100 / (n-1) 即可

2226 Muddy Fields

題意:用最少的木板覆蓋所有的muddy,且木板不能覆蓋到草地

解法:二分匹配 (行列匹配)

拆行和拆列(一行拆成多行),把每一行連續的 * 看做一“行”,把每一列連續的 * 看做一“列”

再對每一個 * 所對應的 “行” 和 “列” 連邊,求二分匹配

2230 Watchcow

題意:無向圖,從1出發經過每條邊2次回到1。輸出路徑

解法:歐拉回路

拆無向邊爲有向邊,a->b b->a ,就變成了每條邊經過一次的歐拉回路。從1做一次歐拉就可以了

2239 Selecting Courses

解法: 基礎二分匹配

2240 Arbitrage

題意:貨幣兌換

解法:Bellman-Ford(或Floyd)

2253 Frogger

解法:二分+最短路

2267* From Dusk till Dawn or: Vladimir the Vampire 最短路


2289 Jamie's Contact Groups  (HDU1669)

解法:二分+二分圖多重匹配 (或 二分答案+網絡流)

2296 Map Labeler 

解法:2-Sat (二分枚舉答案)

2312 Battle City

題意:給以圖,坦克能不能走到目標位置.

解法:上下左右連邊,然後最短路一下就可以了(或者直接用BFS)

2337 Catenyms

解法:歐拉路徑

①用並查集判斷連通性

②判斷入度和出度是否滿足

    歐拉回路-> 入度=出度

    歐拉路徑-> 只有一個,入度-出度=1 ; 只有一個,出度-入度=1

2349 Arctic Network

題意: 有衛星電臺的城市之間可以任意聯絡。沒有衛星電臺的城市只能和距離小於等於D的城市聯絡。題目告訴你衛星電臺的個數S,讓你求最小的D.

做最小生成樹,去掉最長的S條邊後,剩下最長的邊就是D.

也就是求最小生成樹中第S+1長的邊。

解法:最小生成樹

2353 Frogger

解法:最短路(或最小生成樹)

2367 Genealogical tree

解法:基礎拓撲排序

2387 Til the Cows Come Home

解法:基礎最短路

2391* Ombrophobic Bovines

解法:二分+網絡流

S 連 i (牛)  容量: 牛的數量

i+n (棚) 連 T 容量: 能hold牛的個數

i 連 j+n 容量:inf  (表示可行流)

PS:  const ll inf=9999999999999999ll;  up=inf (上界)    WA

        up=9999999999999999ll                                              AC

2394 Checking an Alibi

題意: 給你無向圖,兩點間花費的時間。再給你每個牛所在的位置。

給定一個time , 問你哪些牛可以在time時間內到達 1

解法:最短路

2396* Budget 上下界網絡流


2421* Constructing Roads

解法:基礎最小生成樹

2446 Chessboard

題意:去掉k個洞,剩下的點能不能用1X2的矩形完全覆蓋

解法:二分匹配

相連的2點進行匹配,判斷是否是完全匹配

2455 Secret Milking Machine

解法:二分+網絡流

注意重邊也要!

2457 Part Acquisition

解法:最短路 (輸出路徑)

2472 106 miles to Chicago

解法:最短路

求邊乘積最大,將其化成對數,就是加起來最大。讓後就是裸的最長路了 

2485 Highways

解法:基礎最小生成樹

2502 Subway

解法:最短路

2516 Minimum Cost 費用流


2536 Gopher II

解法:基礎二分匹配

2553* The Bottom of a Graph

法:強連通

出度爲0的點,它們能到達的點V,V都能到達它們

2570 Fiber Network

解法:最短路預處理+位運算 ( 好題啊! )

2584 T-Shirt Gumbo

解法:多重匹配

2594* Treasure Exploration

解法:floyd傳遞性+二分匹配(最小路徑覆蓋)

2672 Hotkeys

2723 Get Luffy Out

解法:二分+2-Sat

2-Sat的本質就是:一件物品選了,對另一件物品的影響。

每個物品有2個狀態: 選,不選 。即 x 和 ~x

如 x y 。選了x,y鑰匙就會消失。那麼選了x就不能選y, 即選了x就選 ~y (非y)

2724 Purifying Machine 2分匹配


2728 Desert King 最優比例生成樹


2749* Building roads (好題!)

解法:二分+2-Sat

建矛盾: hate的必須分開, 

  like的必須栓在同一個點

 距離矛盾:① dis1[ i ] + dis1[ j ] > mid

                       ② dis2[ i ] + dis2[ j ] > mid

                       ③ dis1[ i ] + dis2[ j ] + dis > mid

                       ④ dis2[ i ] + dis1[ j ] + dis > mid

記:dis1 表示 cow 到 s1 的距離 , dis2 表示 cow 到 s2 的距離 , dis 表示 s1 到 s2 的距離。

2762 Going from u to v or from v to u? 

解法:強連通+拓撲

強連通縮點,同一分量的不需要考慮了。

不屬於同一強連通分支的點就用拓撲排序來判斷,如果某次刪除點的時候發現兩個入度爲0的點,則說明這兩個點只能由已經被刪掉的點到達。

也就是說這兩個點互相不可達。所以只要同時出現了多於一個的0入度的點,那麼這個圖一定是不符合題目要求的,輸出"No".

注:用歐拉路徑判斷是錯的,以下數據

5 8
1 2   1 3   1 5   2 4   2 5   3 4   5 3   5 4

2949* Word Rings

解法:最優比率環

2983 Is the Information Reliable? 

解法:差分約束

P:  c<=s[a]-s[b]<=c

V:  1<=s[a]-s[b]

超級源點: addedge( 0 , i , 0 )

注意:不要忘記建超級源點!!!

2987 Firing 最小割(求解正確性??)


3020 Antenna Placement

題意:用最小的1X2的橢圓覆蓋所有的點。

解法:二分匹配(黑白匹配變形)

先進行黑白(奇偶)進行一次匹配。那麼剩下的未匹配的點,每個就都需要一個橢圓去覆蓋。已經匹配的每一對只要一個橢圓去覆蓋。所以最好的答案就是: ( tot(*點的總數) - 2*match() ) + match() ;

3037 Skiing 

解法:帶限制的最短路 ( 或者 BFS+優先隊列 )

由於速度變化過程中,最小爲-50倍,最大爲50倍。

所以,dis[N][D]開二維,表示到達第i個點,速度變爲(D-50)倍的最短時間。

然後直接最短路或者BFS搞之。

3041 Asteroids 

解法:二分匹配

3072* Robot

解法:計算幾何+最短路

dis[ u ][ v ] 表示從u到v的狀態下,最短時間。

轉移  dis[ u ][ v ] = min( dis[ u ] [ v ] , dis[ j ] [u ] + w + turn( p[j] , p[u] , p[u] , p[v] ) ) ; { 1<=j<=n }

 turn( p[j] , p[u] , p[u] , p[v] ) 用來計算向量 p[j]p[u] 和向量 p[u]p[v] 的夾角。

3114 Countries in War 

解法:強聯通+最短路

3159 Candies

解法:差分約束

dis[i]表示第i個kid拿到的糖果數。dis[b]-dis[a]<=c ,求dis[n]-dis[1]的最大值。 addedge(a,b,c)

(spfa過不了...要用dijkstra+優先隊列(什麼堆優化的都可以)纔可以...)

3160 Father Christmas flymouse 

解法:強聯通+最長路

3164 Command Network 

解法:最小樹形圖(有根樹)

3169 Layout

題意:N只牛按順序從左到右站成一排;

並且 牛a喜歡牛b,那麼他們之間的距離不能超過d;

牛a不喜歡牛b,那麼他們之間的距離至少要d。

解法:差分約束

like
   0<=dis[b]-dis[a]<=c
   ==> dis[b]-dis[a]<=c
   ==> dis[a]-dis[b]<=0
hate
   dis[b]-dis[a]>=c
   ==> dis[a]-dis[b]<=-c
   dis[i+1]-dis[i]>=0
   ==> dis[i]-dis[i+1]<=0

3177 Redundant Paths 

解法:邊雙連通分量

至少要加多少條邊,使得圖中沒有橋邊

邊雙連通縮圖之後,葉子結點leaf。那麼至少需要加 (leaf+1) / 2 條邊,才能使得每條邊都至少屬於一個環,即沒有橋邊。

3189 Steady Cow Assignment

題意:有N頭牛,B個棚。每頭牛對每個棚有個偏好(第一偏好,第二偏好。。。),並且每個棚有一定的容納量。

現在要你安排牛到每個棚中,使得 牛的最大偏好那個和最小偏好的牛的差值最小。

解法:枚舉偏好區間+多重匹配

枚舉偏好值[ l , r ] , 然後對每個牛偏好在 l ~ r 對應的棚進行多重匹配判斷是否完美匹配。然後取最小差值即可。

3204 Ikki's Story I - Road Reconstruction 最大流

3207 Ikki's Story IV - Panda's Trick

解法:2-SAT

3216 Repairing Company

解法:二分匹配+最短路

給出每個人物的維修位置pi,開始時間ti,結束時間di.
求需要最少的工人完成所有維修工作.
最短路+最小路徑覆蓋

3228 Gold Transportation 網絡流

3255 Roadblocks 

解法:最短路+A*求第2短路

3259 Wormholes

解法:Bellman求負權迴路

3268 Silver Cow Party

解法:最短路(正反向建邊)

3275 Ranking the Cows dfs

3281 Dining 最大流 

3308 Paratroopers 最小割
3310 Caterpillar
3311 Hie with the Pie

解法:Floyd+狀壓DP

  1. //dp[i][j]  :表示狀態i,到達j點的最短路時間   
  2. //g[u][v]   :表示縮圖後的u->v的最短距離   
  3. //ret       :保存經過1~n的點後回到原點0的最短路   
  4. int state=(1<<n);  
  5. for(i=0;i<state;i++) {  
  6.    for(int u=1;u<=n;u++) {  
  7.       if(i==0) dp[i|pw[u-1]][u]=g[0][u];  
  8.       else {  
  9.          for(int v=1;v<=n;v++) {  
  10.             if(i&pw[v-1]) continue;  
  11.             dp[i|pw[v-1]][v]=min(dp[i|pw[v-1]][v],dp[i][u]+g[u][v]);  
  12.          }  
  13.       }  
  14.    }  
  15. }  
  16. int ret=oo;  
  17. for(i=1;i<=n;i++) ret=min(ret,dp[pw[n]-1][i]+g[i][0]);  
   //dp[i][j]  :表示狀態i,到達j點的最短路時間
   //g[u][v]   :表示縮圖後的u->v的最短距離
   //ret       :保存經過1~n的點後回到原點0的最短路
   int state=(1<<n);
   for(i=0;i<state;i++) {
      for(int u=1;u<=n;u++) {
         if(i==0) dp[i|pw[u-1]][u]=g[0][u];
         else {
            for(int v=1;v<=n;v++) {
               if(i&pw[v-1]) continue;
               dp[i|pw[v-1]][v]=min(dp[i|pw[v-1]][v],dp[i][u]+g[u][v]);
            }
         }
      }
   }
   int ret=oo;
   for(i=1;i<=n;i++) ret=min(ret,dp[pw[n]-1][i]+g[i][0]);

3328 Cliff Climbing

解法:BFS(或者用最短路)

3343 Against Mammoths

解法:二分+二分匹配

3352 Road Construction

解法:邊雙連通分量

至少要加多少條邊,使得圖中沒有橋邊

邊雙連通縮圖之後,葉子結點leaf。那麼至少需要加 (leaf+1) / 2 條邊,才能使得每條邊都至少屬於一個環,即沒有橋邊。

3439 Server Relocation

解法:最短路

3463 Sightseeing

解法:最短路

Dijkstra求最短路和次短路條數。

3469 Dual Core CPU 最小割 

3487 The Stable Marriage Problem

解法:穩定婚姻

3521 Geometric Map 計算幾何+最短路


3522 Slim Span 最小生成樹

解法:最小生成樹

MST的最大,最小邊差值最小

枚舉最小邊,然後求MST,保存最小差值。

3549 GSM phone 計算幾何+最短路


3565 Ants

題意:給定2*N個點的座標,讓你用前N個點和後N個點一一配對,使得相連的邊沒有相交的。

解法:KM匹配

首先有一個性質必須知道,那就是最短的配對,必然是沒有相交的。於是我們就可以構建二分圖,求最小權匹配。


根據三角形不等式

ad+bc<ac+bd    dc+ab<ac+bd

因此,我們只需要構造二分圖,求最小權和匹配

3594 Escort of Dr. Who How 

解法:帶限制的最短路

枚舉出發時間+最短路

3615 Cow Hurdles

解法:Floyd(求任意兩點間的最小最高障礙)

3623 Wedding

解法:2-SAT(輸出解)

①建矛盾,跑Tarjan。

②判斷是否有衝突。

③矛盾標號,opp[ u ] 表示連通分量u的對立矛盾事件所在的分量.

④建反圖

⑤拓撲染色。把未染色的點u染成W,並且opp[u]染成B。

⑥輸出被染成W的點集。

3653 Here We Go(relians) Again 最短路


3659* Cell Phone Network 

解法:樹形DP(最小支配集)

sum[u][0] 不覆蓋根節點u,兒子全部被覆蓋.
   sum[u][0] += sum[v][1]
sum[u][1] u不放,但是覆蓋了u節點及所有兒子.
   sum[u][1] += min( f[v][0],f[v][2] ) f[v][0]至少取一個
sum[u][2] 在u放置tower,覆蓋該子樹.
   sum[u][2] += min(sum[v][0] , sum[v][1] ,sum[v][2] )

3660 Cow Contest

解法:Floyd ( 傳遞閉包 )

3662* Telephone Lines

解法:帶限制的最短路

dis[i][j]表示到達第i個點用掉j次免費的最小最大邊長.

然後spfa轉移的時候,多加一個更新:對於u->v的邊 , 用掉免費的: 則更新 

dis[v][j+1] = min( dis[v][j+1] , dis[u][j] );

3678 Katu Puzzle

解法:2-SAT

3683* Priest John's Busiest Day

解法:2-SAT(輸出解)

3687 Labeling Balls

解法:差分約束

很神奇的差分約束。。。

dis[b]-dis[a]>=1
dis[i]-dis[0]>=1

因爲weight都不相同,所以沒有關係的要按照id從小到大賦予不同的weight

  1. floyd();  
  2. for(i=1;i<=n;i++)  
  3.    for(j=i+1;j<=n;j++)  
  4.       if(!g[j][i]) {  
  5.          addedge(i,j,1);  
  6.          g[i][j]=1;  
  7.          for(int k=1;k<=n;k++)  
  8.             if(g[k][i]) g[k][j]=1;  
  9.       }  
      floyd();
      for(i=1;i<=n;i++)
         for(j=i+1;j<=n;j++)
            if(!g[j][i]) {
               addedge(i,j,1);
               g[i][j]=1;
               for(int k=1;k<=n;k++)
                  if(g[k][i]) g[k][j]=1;
            }

3692 Kindergarten

題意:N個boy互相認識,M個girl互相認識。其中一些boy和girl互相認識。

要你找最大的集合,使得集合中的人都互相認識。

解法:二分匹配(最大獨立集)

求二分圖的補圖的最大獨立集。相當於求剩下的點都互相認識。而邊的意義爲不認識的人連邊。

即去掉最少的點,使得剩下的點互相之間沒有邊相連。

3694 Network

解法:雙連通 + LCA

給定一個連通圖後,然後每次加一條邊,都要輸出當前有幾條橋邊。

①進行邊雙連通縮圖,縮圖後,每條邊都爲橋邊。

②對縮圖求LCA,然後對於每次新加邊,就將路徑上所有的邊進行標記。就可以統計剩下還有多少條橋邊。

3723 *Conscription

解法:最小生成樹

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章