難易度評価

難易度を1〜10段階で評価できます。投票はあとから変更・取り消しできます。

難易度(投票) 未投票 (0票)

投票の分布

まだ投票はありません。

  1. Lv.10票
  2. Lv.20票
  3. Lv.30票
  4. Lv.40票
  5. Lv.50票
  6. Lv.60票
  7. Lv.70票
  8. Lv.80票
  9. Lv.90票
  10. Lv.100票

難易度の目安を見る ↗

ログインして難易度を投票

外部サイトへ移動します

リンク先の URL を確認してから開いてください。

別タブで開く

You WILL Like Graph Construction

作成者 loop0919

テスター mackerel38

難易度(作成者設定) Lv.7

難易度(投票) 未投票 (0票)

実行時間制限
2 秒
メモリ制限
512 MiB

解説

最小カットの性質

GG における最短距離を d(u,v)d(u,v)、頂点 vv からの距離和を Dv=∑u=1Nd(v,u)D_v=\sum_{u=1}^{N}d(v,u) とします。 HH の頂点 1,N1,N 間の最小カットの容量は、min⁡(D1,DN)\min(D_1,D_N) です。

これを示します。 頂点 11 または NN だけを切り離せば、容量がそれぞれ D1,DND_1,D_N のカットを作れます。 したがって、任意のカットの容量が min⁡(D1,DN)\min(D_1,D_N) 以上であることを示せば十分です。

カットを S={1}∪X,T={N}∪YS=\{1\}\cup X,T=\{N\}\cup Y とし、その容量を CC とします。 片側が単独の頂点である場合は明らかなので、p=∣X∣≥1,q=∣Y∣≥1p=|X|\ge1,q=|Y|\ge1 とします。 X,YX,Y 間の容量の和を R=∑x∈X,y∈Yd(x,y)R=\sum_{x\in X,y\in Y}d(x,y) と置きます。

三角不等式より、各 x∈X,y∈Yx\in X,y\in Y について

d(1,x)+d(N,y)≤d(1,y)+d(N,x)+2d(x,y)d(1,x)+d(N,y)\le d(1,y)+d(N,x)+2d(x,y)

です。 これをすべての組について足し、C=d(1,N)+∑y∈Yd(1,y)+∑x∈Xd(N,x)+RC=d(1,N)+\sum_{y\in Y}d(1,y)+\sum_{x\in X}d(N,x)+R を使って整理すると、

qD1+pDN≤(p+q)C−(p+q−2)R≤(p+q)CqD_1+pD_N\le(p+q)C-(p+q-2)R\le(p+q)C

となります。 よって C≥min⁡(D1,DN)C\ge\min(D_1,D_N) が成り立ちます。

以降は、min⁡(D1,DN)=K\min(D_1,D_N)=K となるグラフを構築します。

必要条件

実現可能な KK は、次の範囲に限られます。 ただし、(N2)=N(N−1)/2\binom N2=N(N-1)/2 とします。

N−1≤K≤(N2)−⌊N−12⌋またはK=(N2)N-1\le K\le\binom N2-\left\lfloor\frac{N-1}{2}\right\rfloor \quad\text{または}\quad K=\binom N2

下限は、異なる頂点間の距離が 11 以上であることから従います。 上限を示すため、頂点 1,N1,N 間の最短路を一つ取り、その長さを LL、最短路の外にある頂点数を r=N−L−1r=N-L-1 とします。

最短路上の頂点 vv については d(1,v)+d(N,v)=Ld(1,v)+d(N,v)=L です。 最短路の外にある頂点 vv から最短路までの距離を hvh_v とすると、最短路を経由することで

d(1,v)+d(N,v)≤L+2hvd(1,v)+d(N,v)\le L+2h_v

が成り立ちます。 また、rr 個の hvh_v を昇順に並べると、ii 番目の値は ii 以下です。 距離が hh の頂点が存在するには、距離が 1,2,…,h−11,2,\ldots,h-1 の頂点も必要だからです。 したがって、∑hv≤r(r+1)/2\sum h_v\le r(r+1)/2 より

D1+DN≤NL+r(r+1)=N(N−1)−LrD_1+D_N\le NL+r(r+1)=N(N-1)-Lr

となります。

r≥1r\ge1 の場合、L,r≥1L,r\ge1 と L+r=N−1L+r=N-1 より Lr≥N−2Lr\ge N-2 なので、

min⁡(D1,DN)≤⌊D1+DN2⌋≤(N2)−⌊N−12⌋\min(D_1,D_N) \le\left\lfloor\frac{D_1+D_N}{2}\right\rfloor \le\binom N2-\left\lfloor\frac{N-1}{2}\right\rfloor

です。 r=0r=0 の場合、最短路が全頂点を通ります。 パス上で隣接しない頂点を結ぶ辺があると最短路が短くなるため、GG はパスそのものであり、K=(N2)K=\binom N2 となります。

構築方法

頂点 1,N1,N を両端とする長さ LL のパスを作り、残りの r=N−L−1r=N-L-1 頂点を葉としてパスに付けます。 葉 ii を頂点 11 から xix_i 辺進んだ位置に付けると、その葉と頂点 1,N1,N の距離は、それぞれ xi+1,L−xi+1x_i+1,L-x_i+1 です。

BL=L(L+1)2+r=N−1+L(L−1)2,Q=∑i=1rxiB_L=\frac{L(L+1)}2+r=N-1+\frac{L(L-1)}2,\qquad Q=\sum_{i=1}^{r}x_i

と置くと、両端からの距離和は

D1=BL+Q,DN=BL+rL−QD_1=B_L+Q,\qquad D_N=B_L+rL-Q

となります。 各 xix_i は 00 以上 LL 以下の任意の整数にできるため、QQ は 00 から rLrL までのすべての整数を取れます。 よって、固定した LL で実現できる値は、次の区間です。

BL≤K≤UL,UL=BL+⌊rL2⌋=N−1+⌊L(N−2)2⌋B_L\le K\le U_L, \qquad U_L=B_L+\left\lfloor\frac{rL}{2}\right\rfloor =N-1+\left\lfloor\frac{L(N-2)}2\right\rfloor

この構築で、必要条件を満たすすべての KK を実現できます。 N≥3N\ge3 のとき、L=1,…,N−2L=1,\ldots,N-2 に対応する区間の最初の下端と最後の上端は

B1=N−1,UN−2=(N2)−⌊N−12⌋B_1=N-1,\qquad U_{N-2}=\binom N2-\left\lfloor\frac{N-1}{2}\right\rfloor

です。 また、1≤L≤N−31\le L\le N-3 では r≥2r\ge2 なので、

BL+1−UL=L−⌊Lr2⌋≤0B_{L+1}-U_L=L-\left\lfloor\frac{Lr}{2}\right\rfloor\le0

となり、隣り合う区間は重なります。 残る K=(N2)K=\binom N2 は、L=N−1L=N-1 としてパスだけを作れば実現できます。 N=2N=2 の場合も、このパスで唯一可能な値 K=1K=1 を実現できます。

実装では、L=1,2,…,N−1L=1,2,\ldots,N-1 を調べ、BL≤K≤ULB_L\le K\le U_L を満たすものを一つ選びます。 見つからなければ -1 を出力します。

LL が見つかったら、Q=K−BLQ=K-B_L とし、各葉について xi=min⁡(L,Q)x_i=\min(L,Q)、Q←Q−xiQ\gets Q-x_i と貪欲に割り当てます。 最初の QQ は ⌊rL/2⌋\lfloor rL/2\rfloor 以下なので、rr 個の葉で必ず割り当てが完了し、構築後は D1=K≤DND_1=K\le D_N となります。 パスの両端に 1,N1,N、ほかの頂点に残りの番号を割り当てれば完成です。

構築するグラフは NN 頂点 N−1N-1 辺の木であり、単純かつ連結です。 パスの長さの探索と構築を合わせて、各テストケースの時間計算量は O(N)O(N) です。

ユーザー解説

ユーザー解説を書く

ユーザー解説はまだありません。