ARC 044 B - 最短路問題
とりあえずソートしてランレングス圧縮して、同じ距離の頂点グループ毎にグラフを作っていくことを考える。距離0は頂点1だけとか、距離が飛んでいる部分があってはいけないとか、そういうケースは最初に考慮しておく。
頂点1からの距離がiの頂点がBi個あるとする。距離iの頂点同士はどうつないでもほかの頂点と1との距離に影響しない。したがって、(2Bi)通りのペアすべてに自由に辺を張れるので、距離iに対して2(2Bi)通りの辺の張り方があることになる。
次に、距離i−1の頂点グループと距離iの頂点グループをつなぐ辺の張り方を考える。これもだいたい自由に辺を張れるのだが、距離iの頂点は、距離i−1のBi−1個の頂点のうち少なくとも1つにはつながれていなければならないという制約がある。「少なくとも1つ」は包除原理で書ける:
==2Bi−1Bi−(1Bi)2Bi−1(Bi−1)+(2Bi)2Bi−1(Bi−2)−...+(−1)Bi(BiBi)2Bi−1⋅0k=0∑Bi(kBi)(−1)k(2Bi−1)Bi−k(2Bi−1−1)Bi
あっ……
包除で求めてから自明な数え方に気づくパターン、これで3回目くらい。