构造有k个叶子的树,使得叶子两两距离最大尽可能小。
思路:以1为圆心构造k个枝。
int main()
{
int n, k;
while (cin >> n >> k)
{
int re = n - (k + 1);
int p1 = (n - 1) / k;
int p2 = (int)ceil((n - 1)*1.0 / k);
int p3 = (int)ceil((n - 2)*1.0 / k);
if (p2 == p3)cout << 2 * p2 << endl;//多条长的
else cout << p1 + p2 << endl;//0or 1
f(i, 1, k)cout << 1 << " " << i + 1 << endl;
f(i, 1, re)
cout << k + 1 + i << " " << 1 + i << endl;
}
return 0;
}