AtCoder Grand Contest 032 B - Balanced Neighbors——构造
2024-08-27 08:48:39
题意
给定一个整数 $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/
最新文章
- BOM对象有哪些:
- VS更改编辑窗背景
- linux指令(一)文件的操作
- cocos2dx 3.x(场景(层)的生命周期)
- hdu5012 bfs
- prezi破解教程
- SQL Server -SET NOCOUNT
- 【转】android camera(三):camera V4L2 FIMC
- How do I Find Out Linux CPU Utilization?
- php笔记(五)PHP类和对象之对象的高级特性
- iOS9新特性之常见关键字、泛型
- MySQL之增删改查
- java web 在线聊天的基本实现
- 记 Win10 + Ubuntu18.04 安装
- sysbench对MySQL的压测
- node.js 线程调试配置
- 基于ESP32的uart通讯
- VS 插件 Productivity Power Tools - 更改 选项卡组件位置
- leetcode实践:通过链表存储两数之和
- Goroutine(协程)为何能处理大并发?