東京大学プログラミングコンテスト2013

C - 直径


Time limit時間制限 : 2sec / Memory limitメモリ制限 : 256MB

問題

背景

うなぎ王国の隣にはうさぎ王国がある.各王国には沢山の都市があり,都市間には道路がひかれている.現在,うなぎ王国とうさぎ王国を行き来する道路は存在しない.そこで,うなぎ王国の王様はうさぎ王国と友好関係を築くため,2つの王国の都市間に道路を1本建設しようと考えている.建設候補となる道路は沢山あるため,運送コストに敏感な王様は都市間の最短距離の最大値がどのような値をとるかを知りたがっている.

課題

頂点数 n1,辺数 m1 の無向グラフ G1 と頂点数 n2,辺数 m2 の無向グラフ G2 が与えられる.各々のグラフは連結である.すなわち,各グラフについて,任意の2頂点を結ぶ経路が存在する.あなたは,1本の辺を追加して2つのグラフを連結にしようと思っている.辺はどのように追加しても構わない.出来上がるグラフ上で最も遠い2点間の距離(グラフの直径と呼ばれる)が最小・最大いくつになるか答えよ.

配点

100

入力

入力は以下の形式で与えられる.

n1 m1
a1 b1
a2 b2
...
am1 bm1
n2 m2
c1 d1
c2 d2
...
cm2 dm2

最初の行にはグラフ G1 の頂点数 n1 と辺数 m1 が与えられる.続く m1 行には辺の情報が与えられる. aibiG1 において2頂点 aibi 間に辺があること意味する.次の行にはグラフ G2 の頂点数 n2 と辺数 m2 が与えられる.続く m2 行には辺の情報が与えられる. cidiG2 において2頂点 cidi 間に辺があること意味する.

制約

入力中の各変数は以下の制約を満たす.

部分点

この問題には部分点が設定されている.この問題のテストケースのうち50点分は、追加で以下の制約も満たす.

出力

2つのグラフの間に辺を1本追加してできあがるグラフの直径の最小値・最大値を空白スペース区切りで1行に出力せよ.

入力例1

4 5
0 1
0 2
0 3
1 2
2 3
4 5
0 1
0 2
0 3
1 2
2 3

入力例1に対する出力例

3 5

直径が3になる例と5になる例はそれぞれ以下の通り.

1

入力例2

6 5
0 1
1 2
2 3
3 4
4 5
6 5
0 1
1 2
2 3
3 4
4 5

入力例2に対する出力例

7 11

直径が7になる例と11になる例はそれぞれ以下の通り.

2

入力例3

7 6
0 1
1 2
2 3
3 4
4 5
5 6
2 1
0 1

入力例3に対する出力例

6 8

できあがるグラフの直径の最小値に注意せよ.


Submit提出する