題目鏈接:點我啊╭(╯^╰)╮
題目大意:
構造一個n個點的無向圖,使得它和它的補圖同構
解題思路:
核心:團與獨立集之間的構造
#include<bits/stdc++.h>
#define rint register int
#define deb(x) cerr<<#x<<" = "<<(x)<<'\n';
using namespace std;
typedef long long ll;
typedef pair <int,int> pii;
const ll mod = 1e9 + 7;
const int maxn = 2e3 + 10;
int T, n, a[maxn][maxn], cas;
int main() {
scanf("%d", &T);
while(T--){
scanf("%d", &n);
printf("Case #%d: ", ++cas);
if(n%4>1){
puts("No");
continue;
}
puts("Yes");
memset(a, 0, sizeof(a));
int k = n / 4;
for(int i=0; i<k; i++){
for(int j=0; j<k; j++){
if(i^j) a[i*4+1][j*4+1] = a[i*4+2][j*4+2] = 1;
for(int l=0; l<=2; l++)
a[i*4+l][j*4+l+1] = a[j*4+l+1][i*4+l] = 1;
}
}
if(n % 4)
for(int i=0; i<k; i++){
a[i*4+1][n-1] = a[n-1][i*4+1] = 1;
a[i*4+2][n-1] = a[n-1][i*4+2] = 1;
}
for(int i=0; i<n; i++){
for(int j=0; j<n; j++)
printf("%d", a[i][j]);
puts("");
}
for(int i=0; i<k; i++){
printf("%d %d %d %d", i*4+2, i*4+4, i*4+1, i*4+3);
printf("%c", i*4+4==n ? '\n' : ' ');
}
if(n % 4) printf("%d\n", n);
}
}