分析:给你 n 种颜色 、m 个颜色互相协调的棋子。
(1)颜色不协调的不能在同一行或者同一列,但每个颜色至少出现一次。
(2)颜色协调的两种颜色,至少在同一行或者同一列出现一次。
先解决第一个要求,只要在对角线上放每个颜色的棋子一个就可以了,构造出一个n?nn*nn?n的棋盘。
第二个需求,只需要在n+1,n+2.....,n+mn+1,n+2.....,n+mn+1,n+2.....,n+m列上构造每个关系。
#include<iostream>
#include<vector>
#define maxn 10000
typedef long long ll;
using namespace std;
ll m,n,s,e,xx,yy;
vector<int> ve[maxn];
int main()
{
std::ios::sync_with_stdio(false);cin>>n>>m;for(int i=1;i<=n;i++){
ve[i].push_back(i);}ll cur=n+1;for(int i=1;i<=m;i++){
cin>>xx>>yy;ve[xx].push_back(cur);ve[yy].push_back(cur);cur++;}for(int i=1;i<=n;i++){
cout<<ve[i].size()<<endl;for(int j=0;j<ve[i].size();j++){
cout<<i<<" "<<ve[i][j]<<endl;}}return 0;
}