Let's call an undirected graph of n vertices p-interesting, if the following conditions fulfill:
- the graph contains exactly 2n + p edges;
- the graph doesn't contain self-loops and multiple edges;
- for any integer k (1 ≤ k ≤ n), any subgraph consisting of k vertices contains at most 2k + p edges.
A subgraph of a graph is some set of the graph vertices and some set of the graph edges. At that, the set of edges must meet the condition: both ends of each edge from the set must belong to the chosen set of vertices.
Your task is to find a p-interesting graph consisting of n vertices.
The first line contains a single integer t (1 ≤ t ≤ 5) — the number of tests in the input. Next t lines each contains two space-separated integers: n, p (5 ≤ n ≤ 24; p ≥ 0; ) — the number of vertices in the graph and the interest value for the appropriate test.
It is guaranteed that the required graph exists.
For each of the t tests print 2n + p lines containing the description of the edges of a p-interesting graph: the i-th line must contain two space-separated integers ai, bi (1 ≤ ai, bi ≤ n; ai ≠ bi) — two vertices, connected by an edge in the resulting graph. Consider the graph vertices numbered with integers from 1 to n.
Print the answers to the tests in the order the tests occur in the input. If there are multiple solutions, you can print any of them.
1 6 0
1 2 1 3 1 4 1 5 1 6 2 3 2 4 2 5 2 6 3 4 3 5 3 6
题目大意:
给你一个数n,另一个数p,让你构造一个包含n个点,2n+p条边的一个图,使得其子图无论多大(1<=k<=n),其中边的个数都小于等于2k+p;
思路:
直觉告诉我,这个题都是个逗比题,然后看样例输出,按照完全图的顺序来输出的。
那么我为何不试一试按照完全图的顺序输出一发呢?
然后就过了............
就过了..............
过了.............
了.............
Ac代码:
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,p;
scanf("%d%d",&n,&p);
int x,y;
x=1;y=2;
for(int i=0;i<n*2+p;i++)
{
printf("%d %d\n",x,y);
y++;
if(y==n+1)
{
x++;
y=x+1;
}
}
}
}