题意

B - Balanced Neighbors

给定一个整数 $N$($3\leq N \leq 100$),构造一个顶点编号为 $1...N$ 的无向图,需满足如下两个条件:

  • 简单图且连通
  • 存在一个整数 $S$,使得对于每个顶点,与其相连的顶点的编号和都为 $S$

可以证明至少有一个满足上述条件的图,请输出这样的图。

分析

手动尝试一下 $n=3,4,5$,可以找到一个构造方法。

考虑完全 $k$ 分图(类比完全二分图),并保证这 $k$ 部分的和都相等。

如果 $n$ 为偶数,那么我们可以两联配对,即 $\{1,n \},  \{2,n-1 \},..., \{ n/2, n/2+1\}$.

如果 $n$ 为奇数,那么我们把 $n$ 单独拿出来作为一组,剩余的 $n-1$ 个两两配对。

这样构造的图在 $n \geq 3$ 时连通性易证。

#include<bits/stdc++.h>
using namespace std; int n;
int a[][]; void solve()
{
if(n&) n = n-; //奇数化成偶数
for(int i = ;i <= n/;i++)
{
a[i][] = i;
a[i][] = n+-i;
}
for(int i = ;i <= n/;i++)
for(int j = ;j < ;j++)
for(int k = i+;k <= n/;k++)
for(int t = ;t < ;t++)
printf("%d %d\n", a[i][j], a[k][t]);
} int main()
{
scanf("%d", &n);
int m = * (n/) * (n/ - );
if(n & )
{
printf("%d\n", m + n - );
for(int i = ;i < n;i++) printf("%d %d\n", n, i);
solve();
}
else
{
printf("%d\n", m);
solve();
}
return ;
}

参考链接:https://oi-wiki.org/basic/construction/

最新文章

  1. BOM对象有哪些:
  2. VS更改编辑窗背景
  3. linux指令(一)文件的操作
  4. cocos2dx 3.x(场景(层)的生命周期)
  5. hdu5012 bfs
  6. prezi破解教程
  7. SQL Server -SET NOCOUNT
  8. 【转】android camera(三):camera V4L2 FIMC
  9. How do I Find Out Linux CPU Utilization?
  10. php笔记(五)PHP类和对象之对象的高级特性
  11. iOS9新特性之常见关键字、泛型
  12. MySQL之增删改查
  13. java web 在线聊天的基本实现
  14. 记 Win10 + Ubuntu18.04 安装
  15. sysbench对MySQL的压测
  16. node.js 线程调试配置
  17. 基于ESP32的uart通讯
  18. VS 插件 Productivity Power Tools - 更改 选项卡组件位置
  19. leetcode实践:通过链表存储两数之和
  20. Goroutine(协程)为何能处理大并发?

热门文章

  1. DAO工具类的封装源码
  2. 用selenium控制已打开的浏览器
  3. fatfs系统的移植
  4. Arm-Linux 移植 ssh
  5. react实现提示消息容器,可以动态添加,删除内部子提示消息
  6. 使用async和await的异步编程
  7. Jquery DataTables 服务器后端分页 Ajax请求添加自定义参数.
  8. .NET Standards
  9. Nacos笔记01——使用Nacos作为SpringCloud项目的服务注册中心
  10. VBA数组(十四)