题意:
给你n个点,让你构图,只能有n-1条边(这一点很重要)
然后只有一条路的点只能有k个,让你构图。并求出最远两点间的距离。
题解:
那就围圈建点呗,把一个点放中间,外面每一圈是只有一条路的点的个数,顺便记录该点到中心点的距离。
#include<bits/stdc++.h>
#define ll long long
#define mod 1000000007
using namespace std;
const int maxn=2e5+5;
vector <pair<int,int> > vec;
int len[maxn];
int n,k;
int main(){
scanf("%d %d",&n,&k);
for(int i=2;i<=k+1;++i){
vec.push_back(make_pair(1,i));
len[i]=2;
}
int pos=k+2,t=2,l=3;
while(pos<=n){
vec.push_back(make_pair(pos,t));
t++;
len[pos]=l;
pos++;
if((t-2)%k==0) {
l++;
}
}
sort(len+1,len+n+1);
printf("%d\n",len[n]+len[n-1]-2);
for(int i=0;i<vec.size();++i)
printf("%d %d\n",vec[i].first,vec[i].second);
return 0;
}