题目链接:High Load
题目大意:有n个点,有k个点只能连接一条边,其它随意,然后你的图里面有最远的距离,这个最远的距离必须是所有符合条件的图里面最小的,给出最小的最远距离和图的所有的边
题目思路:很巧妙的一个题,我们可以知道有k个点一定在图的最外面,而且这k个点里面的每一层一定是k个,所以我们可以想到去构造一下,首先里面有一个点,然后连接k个点,这k个点向外扩散就好,具体思路看代码应该就懂了
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,k,ans;
scanf("%d%d",&n,&k);
if((n-1)%k == 0) ans = (n-1)/k*2;
else if((n-1)%k == 1) ans = (n-1)/k*2+1;
else ans = (n-1)/k*2+2;
printf("%d\n",ans);
for(int i = 2;i <= k+1;i++){
printf("1 %d\n",i);
}
for(int i = 2;i <= n-k;i++){
printf("%d %d\n",i,i+k);
}
return 0;
}