【codechef】Computer Network(脑洞题)

题目描述

你的一门课的大作业要求你为学校机房设计一个计算机网络。

机房一共有 N 台计算机,而你一共需要建设 M 条链接,每条链接连接两台计算机。同时,网络还需要满足三个条件。

第一个条件是,网络中的每两台计算机都必须直接或者间接地相连。

可能会有人恶意攻击这个网络,因此第二个条件是,如果网络中任意一台机器因为一些原因而无法连接(即断开了与其他所有计算机的链接),剩余的计算机也应当能两两互连。换言之,对于网络中计算机的任意大小为 (N − 1) 的子集,第一个条件都应当成立。

第三个条件是,网络中不应有多余的链接。如果将一条链接移除后,上面的两个条件仍然满足,那么我们称这条链接是多余的。

给定 N 和 M,请构造一个满足上面三个条件的有 N 台计算机和 M 条链接的网络,或者指出问题无解。


输入格式

输入数据的第一行包含一个整数 T,代表数据组数。接下来是 T 组数据。每组数据仅有一行,包含两个整数 N 和 M,分别代表计算机和链接的数量。

输出格式

对于每组数据,如果问题无解,输出一行-1 -1。否则,输出 M 行,每行包含两个整数,代表一条链接所连接的两台计算机的编号。由于有第三个条件的存在,不允许出现重复的链接以及连向自身的链接。

【codechef】Computer Network(脑洞题)_第1张图片

好好感受一下这两幅图。。。明明已经发现了题目给的隐含条件(sub1:1<=n<=4,肯定<=4和>4是两种做法),然后画很久也画出点什么了(在图形内部画点可以增加总的边数,并且在图形内部画边必须至少隔两条外边,并且内部边不能相交),然而脑子却无法转弯,下意识觉得一定要把内边接在两个不同的外点。。。好惨啊就在AC边缘(泪

#include  
#include  
#include  
#include//ll dx[4]={0,0,-1,1};ll dy[4]={-1,1,0,0};  
#include//  
#include  
#include  
#include  
#include  
#include  
#include   
#define ll long long
#define lowbit(x) (x) & (-x)
using namespace std;
map r[27];
int main(){    
	int t;
	cin>>t;
	while(t--){
		int n,m;
		cin>>n>>m;
		if(n<=4){
			if(m!=n){
				cout<<"-1 -1"<

你可能感兴趣的:(困难)