题意就是保证子图满足三个条件
我就是解方程搞的,解k*(k-1)/2 <= 2*k+p
找到第一个不满足的k
然后就可以输出答案了,输出的条件就是第k个点不能和k之后的点相连
同时保证输出2*n+p行
感觉最终判题很有可能跪了。。。因为我真的不知道这个题到底是什么意思啊
代码如下:
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <map>
#define MAXN 30
#define INF 0x7FFFFFFF
#define ll long long
using namespace std;
int a[MAXN][MAXN];
int main(void){
int T;
cin >> T;
while(T--){
int n, p;
cin >> n >> p;
int flag = 0;
for(int i=1; i<=n; ++i){
int sum = i*i-2*i-2*p;
if(sum > 0){
flag = i;
}
}
int count = 0;
int t = 0;
for(int i=1; i<=flag; ++i){
for(int j=i+1; j<=n; ++j){
cout << i << " " << j << endl;
count++;
if(count == 2*n+p){
t = 1;
break;
}
}
if(t == 1)
break;
}
}
return 0;
}