1. 程式人生 > >Codeforces Round #423 (Div. 2) D. High Load(構造題)

Codeforces Round #423 (Div. 2) D. High Load(構造題)

ces lose 最大 int get close fin print 構造

題目鏈接:Codeforces Round #423 (Div. 2) D. High Load

題意:

給你一個數n和k,讓你構造出一顆樹,有k個葉子節點,使得這棵樹的任意兩個點的距離的最大值最小。

題解:

顯然要使得這棵樹的任意兩個點的距離的最大值最小,每個點離樹根越近越好。

然後要求有k個葉子節點,所以我就任意選一個點為根,然後構成一棵m叉的樹就行了。

最大距離的最小值就是離根最遠的和最近的加一加就行了。

技術分享
 1 #include<cstdio>
 2 #define F(i,a,b) for(int i=a;i<=b;++i)
 3 
 4 const int N=2e5+7
; 5 int n,m,a[N]; 6 7 int main() 8 { 9 scanf("%d%d",&n,&m); 10 int now=1; 11 F(i,2,n) 12 { 13 if(i<=m+1)a[i]=1; 14 else a[i]=i-m; 15 } 16 int ans; 17 if((n-1)%m==0)ans=(n-1)/m*2; 18 else if((n-1)%m==1)ans=((n-1)/m*2)+1; 19 else ans=((n-1
)/m*2)+2; 20 printf("%d\n",ans); 21 F(i,2,n)printf("%d %d\n",i,a[i]); 22 return 0; 23 }
View Code

Codeforces Round #423 (Div. 2) D. High Load(構造題)