AtCoder Beginner Contest 280 F問題 Pay or Receive
問題
提出解答
問題の概要
無向グラフ が与えられる. なお,
である.
ここで, 辺を使って頂点を移動すると, 次のようにポイントが変動する.
- 番目の辺を用いて頂点 から頂点 へ移動すると, ポイントが 増加する.
- 番目の辺を用いて頂点 から頂点 へ移動すると, ポイントが 減少する.
次の 個の質問に答えよ.
- 最初のポイントが の状態で頂点 から移動を始め, 頂点 にいる状態でのポイントの最大値を求めよ.
制約
解法
まず, 2頂点 が において同じ連結成分にない場合は明らかに移動が不可能である.
よって, 以降では2頂点 が において同じ連結成分にある場合のみを考慮すれば良い. また, 頂点間の移動を考えていることから, は連結であると仮定してもよい.
は連結であるから, の全域部分木 が存在する. また, をある頂点 を根とする根付き木とみなす. このとき, 任意の頂点 に対して, 根 から移動を始め, 頂点 まで移動した場合におけるポイントの増減 が定まる. 実際, walk はいくつも考えられるが, ポイントの増減の定め方から, 同じ辺の往復によってポイントの増減は相殺される. よって, path におけるポイントの増減のみを考えればよい. これは における BFS や DFS で求めることができる.
の辺のうち, 全域部分木 から外れる辺 について, における を含むサイクルを とする.
- だった場合, このとき, であるから, を一方の向きで一周すると, ポイントが増えてしまう. よって, 任意の2頂点 に対して, から に向かい, 上をポイントが増える向きに何周かした後に に向かうことによって, に到達した時点でのポイントをいくらでも大きくできる.
- の場合, このとき, 上を1周してもポイントは変わらない. よって, から へ移動する方法として を使うものと を経由するものがあるが, これらはポイントの増減は一致する. は全域部分木から外れた辺であったことから, は無いものとして考えても良い.
以上から, 全域部分木 から外れる辺 のうち, となるようなものが存在すれば, 答えは上に非有界である.
逆に, 全ての全域部分木 から外れる辺 で, だったならば, 各問における答えは におけるものを考えれば良く, 特に, と辿る walk を考えればよいので, 答えは である.
連結成分を求めることや, を計算するために BFS, DFS を用いることで 時間で求められる.
なお, この問題では をポテンシャルとして考えている. ポテンシャルの差分は移動の経路に依らないという特徴がある.