题目链接
题意:要你构造出一棵树,树刚好只有k个度为1的点,同时要求树的直径最小。
思路:每k个点一层层平均分就是最优的。
#include<bits/stdc++.h>
using namespace std;
const int maxn =2e5+1;
int main()
{
int n,k;
scanf("%d%d",&n,&k);
if((n-1)%k==0) printf("%d\n",2*((n-1)/k));
else if((n-1)%k==1) printf("%d\n",2*((n-1)/k)+1);
else printf("%d\n",2*((n-1)/k)+2);
for(int i=2;i<=k+1;++i)
printf("%d %d\n",1,i);
int now=k+1;
while(now<n)
{
now++;
printf("%d %d\n",now,now-k);
}
}