牛客多校第六场 E Androgynos 自补图
生活随笔
收集整理的這篇文章主要介紹了
牛客多校第六场 E Androgynos 自补图
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
給定點數,構造自補圖,要求輸出鄰接矩陣,和原圖與補圖的同構映射。
題解:
只有點數為4k和4k+1的情況才能構造自補圖,因為只有這些情況下邊數才為偶數。
一種構造方式是,鄰接矩陣和同構映射增量構造,每次加四個邊xyzw,x和w連接原來的所有邊,yz不連,同構映射是交換xy,zw
參考:www.matrix67.com/blog/archives/6221
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int M = 2e3 + 5; const LL mod = 998244353; const LL lINF = 0x3f3f3f3f3f3f3f3f; bool mp[M][M]; int t; int n; int a[M]; int main() {scanf("%d", &t);for (int cnt = 1; cnt <= t; cnt++){scanf("%d", &n);if (n % 4 == 0){printf("Case #%d: Yes\n", cnt);memset(mp, 0, sizeof mp);mp[2][1] = mp[1][2] = 1;mp[2][3] = mp[3][2] = 1;mp[3][4] = mp[4][3] = 1;a[1] = 2;a[2] = 4;a[3] = 1;a[4] = 3;for (int i = 5; i <= n; i += 4){mp[i][i + 1] = mp[i + 1][i] = 1;mp[i + 1][i + 2] = mp[i + 2][i + 1] = 1;mp[i + 2][i + 3] = mp[i + 3][i + 2] = 1;for (int j = 0; j < 4; j+=3){for (int k = 1; k < i; k++){mp[i + j][k] = mp[k][i + j] = 1;}}a[i] = i + 1;a[i + 1] = i;a[i + 2] = i + 3;a[i + 3] = i + 2;swap(a[i+1], a[i + 2]);}for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){printf("%d", mp[i][j]);}puts("");}for (int i = 1; i < n; i++){printf("%d ", a[i]);}printf("%d\n", a[n]);}else if (n % 4 == 1){printf("Case #%d: Yes\n", cnt);memset(mp, 0, sizeof mp);a[1] = 1;for (int i = 2; i <= n; i += 4){mp[i][i + 1] = mp[i + 1][i] = 1;mp[i + 1][i + 2] = mp[i + 2][i + 1] = 1;mp[i + 2][i + 3] = mp[i + 3][i + 2] = 1;for (int j = 0; j < 4; j+=3){for (int k = 1; k < i; k++){mp[i + j][k] = mp[k][i + j] = 1;}}a[i] = i + 1;a[i + 1] = i;a[i + 2] = i + 3;a[i + 3] = i + 2;swap(a[i+1], a[i + 2]);}for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){printf("%d", mp[i][j]);}puts("");}for (int i = 1; i < n; i++){printf("%d ", a[i]);}printf("%d\n", a[n]);}else{printf("Case #%d: No\n", cnt);}} }?
轉載于:https://www.cnblogs.com/isakovsky/p/11296632.html
總結
以上是生活随笔為你收集整理的牛客多校第六场 E Androgynos 自补图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Safe or Glitch-Free
- 下一篇: MySql中delimiter