#hitachi20172a. [hitachi2017_2_a]Problem 2

[hitachi2017_2_a]Problem 2

問題文

頂点集合 VV 、辺集合 EE よりなるグラフを G=(V,E)G=(V,E) と書く。二つのグラフ G=(V,E)G=(V,E)Gemb=(Vemb,Eemb)G_{emb}=(V_{emb},E_{emb}) が与えられている。 下記制約のもとで、以下で説明する得点ができるだけ高くなるように、 VV のすべての要素に対し VembV_{emb} の頂点の部分集合を対応させよ。 なお、 GembG_{emb} は以下の図で示すような、一行に含まれる頂点数と一列に含まれる頂点数が等しい正方形型の King's Graph である。King's Graph の頂点の番号付けについては、 左上が 11 であり、以降左から右に順に番号を振り、行末に到達したときは次の行から同様に順に番号を振るものとする。

得点計算について

各テストケースの得点およびこの問題の得点は、以下のように計算する。

  • 以下では VVii 番目の頂点に対応する VembV_{emb} の部分集合をs(i)Vembs(i) ⊂ V_{emb} とする。初期の持ち点 50005000 点に以下のように加点または減点することで各テストケースの得点を計算する。
  • グラフ GG の各辺 (u,v)inE(u,v) \\in E に対し、s(u)s (u) に属する頂点 ains(u)a \\in s (u)s(v)s (v) に属する頂点 bins(v)b \\in s (v) が存在し、それらがグラフ GembG_{emb} の辺で結ばれている、すなわち (a,b)inEemb(a,b) \\in E_{emb} であるとき、100100 点を加点する。
  • グラフ GG のすべての辺 (u,v)inE(u,v) \\in E に対し 100100 点加点されたとき、さらに 100000100000 点をボーナス点として加点する。ただし、すべてのテストケースについてボーナス点が獲得できる入力であることは保証されていない。
  • 上の合計点から uinV(s(u)1)∑ _{u \\in V} (|s(u)|-1) 点を減点したものが、各テストケースの得点となる。
  • 以下の条件のいずれかに該当する場合は 00 点となる。
  1. グラフ GembG_{emb} から、部分集合 s(i)Vembs(i) ⊂ V_{emb} に含まれない頂点とそれに隣接する辺を全て削除してできたグラフが連結とならないものが存在する(下図の赤色の四角を参照)。
  2. 異なる 22 つの部分集合 s(i),s(j)s(i), s(j) (ineqj)(i \\neq j) において、共通部分が空でないものが存在する(下図の青色と紫色の四角を参照)。
  3. 部分集合が空であるもの、すなわち s(i)=0|s(i)| = 0 となるような部分集合 s(i)s(i) が存在する。
  4. 実行制限時間またはメモリを超過する、ないしは出力が正しい出力フォーマットに従っていない。

得点が 00 点となる条件 1122 に該当する具体例

  • テストケースは全部で 3030 個あり、各テストケースの得点の合計がこの問題の得点となる。
  • コンテスト終了後にシステムテストを行い、この 3030 個とは別のジャッジデータ 150150 個に対する得点の合計が最終得点となる。

入力

入力は以下の形式で標準入力から与えられる。入力はすべて整数値である。

V|V| E|E| u1u_1 v1v_1 u2u_2 v2v_2 : uEu_{|E|} vEv_{|E|} Vemb|V_{emb}| Eemb|E_{emb}| a1a_1 b1b_1 a2a_2 b2b_2 : aEemba_{|E_{emb}|} bEembb_{|E_{emb}|}

  • V|V|E|E| はグラフ GG の頂点の数と辺の数を表す。
  • ui,viu_i, v_i はグラフ GG の辺についての情報であり、頂点 uiu_i と頂点 viv_i が辺で接続されていることを表す。
  • Vemb|V_{emb}|Eemb|E_{emb}| はグラフ GembG_{emb} の頂点の数と辺の数を表す。
  • ai,bia_i, b_i はグラフ GembG_{emb} の辺についての情報であり、頂点 aia_i と頂点 bib_i が辺で接続されていることを表す。

グラフ GG についての制約

  • 2leqVleq5times1022 \\leq |V| \\leq 5 \\times 10^2
  • $1 \\leq |E| \\leq min ( \\frac{|V| \\times (|V|-1)}{2}, 2 \\times 10^4 )$
  • 1lequiltvileqV1 \\leq u_i \\lt v_i \\leq |V|
  • ineqji \\neq j ならば、 uinequju_i \\neq u_j または vineqvjv_i \\neq v_j
  • 与えられるグラフは連結である。

グラフ GembG_{emb} についての制約

  • GembG_{emb} は正方形の King's グラフである。
  • 4leqVembleq3.6times1034 \\leq |V_{emb}| \\leq 3.6 \\times 10^3 かつ Vemb|V_{emb}| は平方数
  • VleqVemb|V| \\leq |V_{emb}|
  • 1leqailtbileqVemb1 \\leq a_i \\lt b_i \\leq |V_{emb}|

出力

出力は以下の形式で標準出力に V|V| 行で出力せよ。

n1n_1 x1,1x_{1,1} x1,2x_{1,2} ... x1,n1x_{1,n_1} n2n_2 x2,1x_{2,1} x2,2x_{2,2} ... x2,n2x_{2,n_2} : nVn_{|V|} xV,1x_{|V|,1} xV,2x_{|V|,2} ... xV,nVx_{|V|,n_{|V|}}

  • nin_iVVii 番目の頂点に対応する VembV_{emb} の部分集合の要素数 s(i)|s (i)| である。
  • xi,jx_{i,j}VVii 番目の頂点に対応する VembV_{emb} の部分集合の jj 番目の要素である。

出力についての制約

  • 出力は V|V| 行からなる
  • 1leqni1 \\leq n_i
  • 1leqxi,jleqVemb1 \\leq x_{i,j} \\leq |V_{emb}|
  • ineqji \\neq j または kneqlk \\neq l ならば xi,kneqxj,lx_{i,k} \\neq x_{j,l}

グラフ GG の生成について

すべてのテストケースについて、与えられるグラフ GG は「ランダムグラフ」である。 これははじめに、 V|V| 頂点からなる木をランダムに生成し、その後 EV+1|E| - |V| + 1 回ランダムに辺を張ることで生成される。詳細はサンプルコードをご覧ください。


入力例 1


7 14
1 2
1 3
1 6
1 7
2 4
2 5
2 6
2 7
3 5
3 7
4 5
4 6
4 7
5 7
25 72
1 2
1 6
1 7
2 6
2 3
2 7
2 8
3 7
3 4
3 8
3 9
4 8
4 5
4 9
4 10
5 9
6 7
6 11
6 12
7 11
7 8
7 12
7 13
8 12
8 9
8 13
8 14
9 13
9 10
9 14
9 15
10 14
11 12
11 16
11 17
12 16
12 13
12 17
12 18
13 17
13 14
13 18
13 19
14 18
14 15
14 19
14 20
15 19
16 17
16 21
16 22
17 21
17 18
17 22
17 23
18 22
18 19
18 23
18 24
19 23
19 20
19 24
19 25
20 24
5 10
10 15
15 20
20 25
21 22
22 23
23 24
24 25

出力例 1


3 14 15 20
1 19
1 9
1 23
1 18
1 25
1 13

この出力例では、入力グラフ GG の各頂点に対して、VembV_{emb} の部分集合は以下の図で対応付ける。すなわち、入力グラフの頂点の番号を v1v_1 から v7v_7 としており、各頂点に対応する VembV_{emb} の部分集合 ss は、それぞれ同じ色で囲まれている。

出力例 11VembV_{emb} に対応付けられた結果、得られる得点は以下のように計算される。

  • 基本得点として 50005000 点を加点する。
  • グラフ GembG_{emb} において保持されている辺に対して 11times100=110011 \\times 100 = 1100 点を基本得点に加点する。 例えば、グラフ GG の辺 (v1,v7)(v_1, v_7) において、 v1v_1 に対応する VembV_{emb} の部分集合 s(v1)s(v_1) の元である GembG_{emb} の頂点 1414 と、 v7v_7 に対応する VembV_{emb} の部分集合 s(v7)s(v_7) の元である GembG_{emb} の頂点 1313 との間に辺 (13,14)(13, 14) が存在する。 従って、辺 (v1,v7)(v_1, v_7) はグラフ GembG_{emb} において保持されており、 100100 点を加点する。一方、辺 (v3,v5)(v_3, v_5) に対しては、各頂点に対する部分集合 s(v3)s(v_3)s(v5)s(v_5) の間に辺が存在しないため、その辺に対して 100100 点を加点しない。 これをグラフ GG のすべての辺に対して見たとき、保持された 1111 個の辺に対しては加点されるが、図の赤の×印で示すように、保持されなかった 33 個の辺に対しては加点されない。
  • グラフ GG の辺で保持されていないものがあるため、ボーナス点 100000100000 点は加点されない。
  • 各部分集合 s(v1)s(v_1) から s(v7)s(v_7) の要素数に対して、$(3-1) + (1-1) + (1-1) + (1-1) + (1-1) + (1-1) + (1-1) = 2$ 点を減点する。各括弧内の最初の項は、各部分集合の要素数を示し、ここで s(v1)s(v_1)33 個の要素数を持つため、22 点が減点される。

以上のことから、合計 60986098 点がこのテストケースに対する得点となる。

入力例 2


10 30
3 10
3 6
5 10
5 8
2 6
2 7
1 5
1 9
4 10
5 7
4 6
2 8
1 2
7 10
2 4
1 3
7 8
1 8
6 9
2 9
1 4
2 10
2 3
6 10
8 10
6 8
5 6
3 8
7 9
4 9
16 42
1 2
1 5
1 6
2 5
2 3
2 6
2 7
3 6
3 4
3 7
3 8
4 7
5 6
5 9
5 10
6 9
6 7
6 10
6 11
7 10
7 8
7 11
7 12
8 11
9 10
9 13
9 14
10 13
10 11
10 14
10 15
11 14
11 12
11 15
11 16
12 15
4 8
8 12
12 16
13 14
14 15
15 16

出力例 2


1 5
2 7 10
1 1
1 2
1 12
1 6
1 15
1 9
1 4
4 3 8 11 14

この入力例を図示したものは以下の通りである。

ジェネレータとテスターおよび参考文献

  • この問題のジェネレータおよびテスターはここからダウンロードできる。
  • この問題を解くにあたって、以下の文献を参考にしながら解答を作成しても良い。

J. Cai, et al., "A practical heuristic for finding graph minors", arXiv:1406.2741 [quant-ph]