#futurecontest2020final2a. [future_contest_2020_final_2_a]千の木2

[future_contest_2020_final_2_a]千の木2

問題文の変更点

  • KK が固定でなくなり、木ごとに KiK_i が与えられ、22 以上 100100 以下の頂点の木が与えられるようになりました。
  • cic_i の生成式を変更しました。中頂点の割合が下がり、弱頂点が増え、cic_i が全体的に少なくなっています。

問題文

二次元座標平面上に NN 個の頂点、頂点 1,ldots,N1, \\ldots, N があります。また、SS 個の無向木 T1,ldots,TST_1, \\ldots, T_S が与えられます。

あなたの課題は、平面上の頂点を結ぶ辺を何本か張って NN 頂点の無向グラフ GG を作成し、GG から SS 個のグラフを「取り出す」ことです。取り出したグラフが T1,ldots,TST_1, \\ldots, T_S に「似ている」ほど高得点となります。以下、各事項について詳細を述べます。

  • 平面上の頂点について: 頂点 ii (1leqqileqqN)(1 \\leqq i \\leqq N) の座標は (xi,yi)(x_i, y_i) であり、これらの座標はすべて 00 以上 10001000 以下の整数です。また、各頂点には正の整数値 パワー が定められており、頂点 ii のパワーは cic_i です。

  • T1,ldots,TST_1, \\ldots, T_S について: いずれも、1,ldots,K1, \\ldots, K の番号が付けられた KiK_i 個の頂点を持つ無向木です。便宜上、これらの木は番号 11 の頂点を根とする根付き木として入力され、木 TiT_i (1leqqileqqS)(1 \\leqq i \\leqq S) における番号 jj (2leqqjleqqKi)(2 \\leqq j \\leqq K_i) の頂点の親は番号 pi,jp_{i,j} の頂点です。

  • 辺の追加について: 作成するグラフ GG には 00 本以上 100000100000 本以下の任意の本数の無向辺を張ることができます。ただし、辺 i,j\\{i, j\\} (ineqj)(i \\neq j) を張るには、頂点 i,ji, j 間のユークリッド距離が ci+cjc_i + c_j 以下でなければなりません。また、自己辺や多重辺を生じさせてはなりません。

  • グラフの取り出しについて: それぞれの木 TiT_i (1leqqileqqS)(1 \\leqq i \\leqq S) に対して、GG の相異なる KiK_i 頂点 Vi,1,ldots,Vi,KiV_{i,1}, \\ldots, V_{i,K_i} を指定してください。これは、各 jj (1leqqjleqqKi)(1 \\leqq j \\leqq K_i) について、頂点 Vi,jV_{i,j}TiT_i の番号 jj の頂点に対応させることを表します。同じ頂点を複数の木に対して用いても構いません。

  • 得点について: それぞれの木 TiT_i (1leqqileqqS)(1 \\leqq i \\leqq S) について以下のように点数を算出し、SS 個の木に対する点数の合計がそのテストケースにおけるあなたの得点となります。

  • ある整数 x,yx, y (1leqqx,yleqqKi)(1 \\leqq x, y \\leqq K_i) が存在して、TiT_i が辺 x,y\\{x, y\\} を持つが GG が辺 Vi,x,Vi,y\\{V_{i,x}, V_{i,y}\\} を持たないとき: 00

  • そうでないとき、整数の組 (x,y)(x, y) (1leqqx,yleqqKi)(1 \\leqq x, y \\leqq K_i) であって、GG が辺 Vi,x,Vi,y\\{V_{i,x}, V_{i,y}\\} を持つが TiT_i が辺 x,y\\{x, y\\} を持たないものの個数を eie_i とする。

    • ei=0e_i = 0 のとき: 100100
    • ei=1e_i = 1 のとき: 1010
    • ei=2e_i = 2 のとき: 11
    • eigeqq3e_i \\geqq 3 のとき: 00

制約

  • N=1000N = 1000
  • S=1000S = 1000
  • 2leqqKileqq1002 \\leqq K_i \\leqq 100
  • 0leqqxi,yileqq10000 \\leqq x_i, y_i \\leqq 1000
  • 1leqqcileqq15001 \\leqq c_i \\leqq 1500
  • 1leqqpi,jleqqj11 \\leqq p_{i,j} \\leqq j-1
  • 入力中の値はすべて整数である。

入力

入力は以下の形式で標準入力から与えられる。

NN SS x1x_1 y1y_1 c1c_1 x2x_2 y2y_2 c2c_2 :: xNx_N yNy_N cNc_N K1K_1 p1,2p_{1,2} p1,3p_{1,3} ldots\\ldots p1,K1p_{1,K_1} K2K_2 p2,2p_{2,2} p2,3p_{2,3} ldots\\ldots p2,K2p_{2,K_2} :: KSK_S pS,2p_{S,2} pS,3p_{S,3} ldots\\ldots pS,KSp_{S,K_S}

出力

以下の形式で出力せよ。

MM A1A_1 B1B_1 A2A_2 B2B_2 :: AMA_M BMB_M V1,1V_{1,1} V1,2V_{1,2} ldots\\ldots V1,K1V_{1,K_1} V2,1V_{2,1} V2,2V_{2,2} ldots\\ldots V2,K2V_{2,K_2} :: VS,1V_{S,1} VS,2V_{S,2} ldots\\ldots VS,KSV_{S,K_S}

これは、作られたグラフ GGMM (0leqqMleqq100000)(0 \\leqq M \\leqq 100000) 本の辺 $\\{A_1, B_1\\}, \\{A_2, B_2\\}, \\ldots, \\{A_M, B_M\\}$ (1leqqAi,BileqqN)(1 \\leqq A_i, B_i \\leqq N) を持つことを表す。辺は任意の順で出力してよく、各辺の端点を出力する順も任意でよい。Vi,jV_{i,j} (1leqqVi,jleqqN)(1 \\leqq V_{i,j} \\leqq N) に関しては問題文本文を参照せよ。

テストケースは 5050 個与えられる。各テストケースについて、問題文本文に記載された通りに点数が計算され、全てのテストケースに対する点数の合計がその提出の得点となる。

上記のフォーマットに違反する出力や、またはその他の何らかの欠陥 (例: 自己辺や多重辺の存在、一度の取り出しにおける頂点の重複) のある出力は「不正解」と判定されることがある。この場合、そのテストケースが入力例として与えられているものであれば、そのテストケースでの得点が 00 点となる。その他のテストケースであれば、入力例以外の全てのテストケースでの得点が 00 点となる。

テストケース生成方法

  • 各頂点 ii (1leqqileqqN)(1 \\leqq i \\leqq N) の座標 xi,yix_i, y_i は、それぞれ 00 以上 10001000 以下の整数から一様ランダムに選ばれる。これら 2N2N 個の座標はすべて独立に選ばれ、複数の点が一致しても再抽選などは行われない。

  • 各頂点 ii (1leqqileqqN)(1 \\leqq i \\leqq N) は、55% の確率で 強頂点1010% の確率で 中頂点8585% の確率で 弱頂点 となる。これに基づき、cic_i が以下の範囲の整数から一様ランダムに選ばれる。

  • 強頂点: 200200 以上 500500 以下

  • 中頂点: 5050 以上 200200 以下

  • 弱頂点: 11 以上 5050 以下

  • i,ji, j (1leqqileqqS,2leqqjleqqKi)(1 \\leqq i \\leqq S, 2 \\leqq j \\leqq K_i) に対し、木 TiT_i の番号 jj の頂点の親 pi,jp_{i,j}11 以上 j1j - 1 以下の整数から一様ランダムに選ばれる。

入出力例

入力例および出力例は このリンク からダウンロードできます。