Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
第2回  早稲⽥田⼤大学プログラミングコンテスト    E: 独⽴立立記念念⽇日    keyword: グラフ、森、閉路路
問題概要都市間にある道路路の様⼦子を表すグラフが与えられる。
問題概要                5       10                    1      12   10            2   7道路路には⻑⾧長さが指定されている。
問題概要                5       10                    1      12   10            2   7道路路のうちいくつかを切切断して、都市を独⽴立立した k 個のグループに分ける。
問題概要            5       10                1  12   10            2   7            [!] 道路路の切切断には、⻑⾧長さに応じたコストがかかる
問題概要       10  12    2   7
問題概要ここでは、k = 3 つのグループに分割。このときかかったコスト(切切断した道路路⻑⾧長の合計)は、5 + 1 + 10 = 16
問題概要   Kグループに分割するときの、   最⼩小コストを求めてください。ここでは、k = 3 つのグループに分割。このときかかったコスト(切切断した道路路⻑⾧長の合計)は、5 + 1 + 10 = 16
グラフの分割?ややこしそう・・・
グラフの分割?ややこしそう・・・¤  [!] グラフにはめちゃくちゃ厳しい条件がついている ¤  閉路路は⾼高々1つしかない¤  まず、閉路路がない場合を考えてみます。
部分点(30pt)制約¤  制約  ¤  都市の数  <= 100  ¤  道路路の数  <= 10,000ぐらい    ¤  (これは実はこけおどし。実際はそんなに無い)  ¤  閉路路は含まない
こんな感じのグラフになります
こんな感じのグラフになります[!] つまり、森(:閉路路なし、連結とは限らない)になっている(森: ⽊木が複数集まったグラフ。⽊木は閉路路を含まない、連結のグラフ)上のグラフは⽊木が3つあり、森になっている
森だと何が嬉しい?
森だと何が嬉しい?
森だと何が嬉しい?
森だと何が嬉しい?
森だと何が嬉しい?[!] どの道路路を切切ってもグループ数が 1 増える
部分点(30pts)解法¤  なので、k-(連結成分の個数) 回の切切断を⾏行行えばいい。  ¤  切切断を⾏行行う道路路は、コストの⼩小さいものから貪欲に選んでよい      ¤  どれを切切ってもグループ数が増えるので¤  解法  ...
満点制約¤  制約  ¤  都市の数  <= 100  ¤  道路路の数  <= 10,000ぐらい  ¤  閉路路は⾼高々1つ (0 or 1)
閉路路を⾒見見つける[!] ⽅方法は後ほど解説します
閉路路の都市をまとめて考える[!] これは森になっている
閉路路の1辺を消してみる
閉路路の1辺を消してみる[!] やっぱりこれも森になっている⇒ さっきの部分点解法が使える
閉路路の⾒見見つけ⽅方              グラフに含まれる閉路路数が1の時に限り、              簡単な⽅方法が使えます
閉路路の⾒見見つけ⽅方          2      4           4  1   2       1       1      1       各頂点の次数(繋がってる辺の数)を              数えます。
閉路路の⾒見見つけ⽅方           2      4            4  1   2        1       1      1   次数1の頂点が含まれる辺を消します。          この時、両側の次数を1つずつ減らします
閉路路の⾒見見つけ⽅方           2      3            2  0   1        0       0      0   次数1の頂点が含まれる辺を消します。          この時、両側の次数を1つずつ減らします
閉路路の⾒見見つけ⽅方           2      3            2  0   1        0       0      0   同じ事を次数1の頂点がなくなるまで          繰り返します。
閉路路の⾒見見つけ⽅方           2      2            2  0   0        0       0      0   これ以上辺を消せないので終了了。          残った辺が閉路路になります。
解法¤  連結成分を数える (その個数をAとおく)  ¤  A >= k なら 0 を出⼒力力して終了了¤  閉路路を⾒見見つける¤  場合分けをして、最⼩小コストを求める  ¤  閉路路の道路路を切切断しない場合    ¤  閉路...
統計¤  First AC : takapt (42:31)¤  正解数 : 30   ¤  通した⼈人(30/205) : 15%   ¤  ACだった解答(30/363) : 8%
Upcoming SlideShare
Loading in …5
×

WUPC2nd E問題

1,082 views

Published on

第2回 早稲田大学プログラミングコンテストのE問題 : 独立記念日の解説スライドです。

Published in: Technology
  • Login to see the comments

WUPC2nd E問題

  1. 1. 第2回  早稲⽥田⼤大学プログラミングコンテスト E: 独⽴立立記念念⽇日 keyword: グラフ、森、閉路路
  2. 2. 問題概要都市間にある道路路の様⼦子を表すグラフが与えられる。
  3. 3. 問題概要 5 10 1 12 10 2 7道路路には⻑⾧長さが指定されている。
  4. 4. 問題概要 5 10 1 12 10 2 7道路路のうちいくつかを切切断して、都市を独⽴立立した k 個のグループに分ける。
  5. 5. 問題概要 5 10 1 12 10 2 7 [!] 道路路の切切断には、⻑⾧長さに応じたコストがかかる
  6. 6. 問題概要 10 12 2 7
  7. 7. 問題概要ここでは、k = 3 つのグループに分割。このときかかったコスト(切切断した道路路⻑⾧長の合計)は、5 + 1 + 10 = 16
  8. 8. 問題概要 Kグループに分割するときの、 最⼩小コストを求めてください。ここでは、k = 3 つのグループに分割。このときかかったコスト(切切断した道路路⻑⾧長の合計)は、5 + 1 + 10 = 16
  9. 9. グラフの分割?ややこしそう・・・
  10. 10. グラフの分割?ややこしそう・・・¤  [!] グラフにはめちゃくちゃ厳しい条件がついている ¤  閉路路は⾼高々1つしかない¤  まず、閉路路がない場合を考えてみます。
  11. 11. 部分点(30pt)制約¤  制約 ¤  都市の数  <= 100 ¤  道路路の数  <= 10,000ぐらい ¤  (これは実はこけおどし。実際はそんなに無い) ¤  閉路路は含まない
  12. 12. こんな感じのグラフになります
  13. 13. こんな感じのグラフになります[!] つまり、森(:閉路路なし、連結とは限らない)になっている(森: ⽊木が複数集まったグラフ。⽊木は閉路路を含まない、連結のグラフ)上のグラフは⽊木が3つあり、森になっている
  14. 14. 森だと何が嬉しい?
  15. 15. 森だと何が嬉しい?
  16. 16. 森だと何が嬉しい?
  17. 17. 森だと何が嬉しい?
  18. 18. 森だと何が嬉しい?[!] どの道路路を切切ってもグループ数が 1 増える
  19. 19. 部分点(30pts)解法¤  なので、k-(連結成分の個数) 回の切切断を⾏行行えばいい。 ¤  切切断を⾏行行う道路路は、コストの⼩小さいものから貪欲に選んでよい ¤  どれを切切ってもグループ数が増えるので¤  解法 ¤  連結成分(⽊木)を数える ¤  その個数がK以上なら、切切る必要がない。 ¤  辺をコストの昇順にソートする。 ¤  コストの⼩小さい⽅方から、連結成分がK個になるまで切切る。 ¤  そのときの合計が答えになる
  20. 20. 満点制約¤  制約 ¤  都市の数  <= 100 ¤  道路路の数  <= 10,000ぐらい ¤  閉路路は⾼高々1つ (0 or 1)
  21. 21. 閉路路を⾒見見つける[!] ⽅方法は後ほど解説します
  22. 22. 閉路路の都市をまとめて考える[!] これは森になっている
  23. 23. 閉路路の1辺を消してみる
  24. 24. 閉路路の1辺を消してみる[!] やっぱりこれも森になっている⇒ さっきの部分点解法が使える
  25. 25. 閉路路の⾒見見つけ⽅方 グラフに含まれる閉路路数が1の時に限り、 簡単な⽅方法が使えます
  26. 26. 閉路路の⾒見見つけ⽅方 2 4 4 1 2 1 1 1 各頂点の次数(繋がってる辺の数)を 数えます。
  27. 27. 閉路路の⾒見見つけ⽅方 2 4 4 1 2 1 1 1 次数1の頂点が含まれる辺を消します。 この時、両側の次数を1つずつ減らします
  28. 28. 閉路路の⾒見見つけ⽅方 2 3 2 0 1 0 0 0 次数1の頂点が含まれる辺を消します。 この時、両側の次数を1つずつ減らします
  29. 29. 閉路路の⾒見見つけ⽅方 2 3 2 0 1 0 0 0 同じ事を次数1の頂点がなくなるまで 繰り返します。
  30. 30. 閉路路の⾒見見つけ⽅方 2 2 2 0 0 0 0 0 これ以上辺を消せないので終了了。 残った辺が閉路路になります。
  31. 31. 解法¤  連結成分を数える (その個数をAとおく) ¤  A >= k なら 0 を出⼒力力して終了了¤  閉路路を⾒見見つける¤  場合分けをして、最⼩小コストを求める ¤  閉路路の道路路を切切断しない場合 ¤  閉路路以外の道路路についてソートして、k-A個⾜足す ¤  [!] 残りの道路路が⾜足りない場合に注意する ¤  閉路路の道路路を切切断する場合 ¤  閉路路のうち、⼀一番短いのを消す。 ¤  残った道路路をソートして k-A個⾜足す
  32. 32. 統計¤  First AC : takapt (42:31)¤  正解数 : 30 ¤  通した⼈人(30/205) : 15% ¤  ACだった解答(30/363) : 8%

×