ABC108/ARC102 D - All Your Paths are Different Lengths
復習日記
700点問題はさすがに難しいので解説その他もろもろを見ながら解きました
問題概要
整数が与えられるので以下の条件を満たすグラフを一つ出力。
- 頂点が以下で頂点の番号はまで
- 辺数が60以下で長さが
- 辺は頂点の数字が小さいほうから大きいほうに引く
- 頂点1から頂点までのパスがちょうど個あり、各パスの長さがまで
考え方
一つ目のサンプルが少しヒントになっていると感じました。 ポイントは長さ1でつながってるパスがあり、そのパスに対して長さ0の辺を引いているところ。 長さの順にパスを並べてみると、
- [0, 0, 0, 0]
- [0, 0, 0, 1]
- [0, 0, 1, 1]
- [0, 1, 1, 1]
というようになっていて、ここから2進数のように見える発想が出れば解法の半分までたどり着くことがで来そうです。
個の頂点に対して辺の長さを1だけでなくてと変えて同じように0の辺を作ればのパスを作ることができます。
これでちょうどの時なら作ることができました。
ここで例えばだとすると上の図ではのパスが足りません。
この時に、下の図のように1本辺を足すとまでのパスが4通り増えて必要なパスをすべてそろえることができます。
パスの数を足すには例えば6本足したいときには2本と4本()に分けてパスを追加することで過不足なくパスを増やすことができます。
最後に制約の確認をすると、
- 頂点は20個までなので、なので
- 辺は20個の頂点の時に、
となるので問題なさそうです。
やはり700点問題は難しいですね。