题目大意
我们说一个无向图是 p-interesting 当且仅当这个无向图满足如下条件:
1. 该图恰有 2 * n + p 条边
2. 该图没有自环和重边
3. 该图的任意一个包含 k 个节点的子图含有不超过 2 * k + p 条边
现在,请你找出一个 p-interesting 包含 n 个节点的无向图,输出他的 2 * n + p 条边
数据范围:5 ≤ n ≤ 24,0 ≤ p, 2 * n + p ≤ (n) * (n + 1) / 2
做法分析
好久没有做题了,刷刷水题练练手
第一感觉:乱搞,后来想了会儿,还是乱搞
构造方法:
先将所有的点连成一个环,如果边数不够,就将间隔为 1 个点的两个点对之间建立一条边,如果还不够,就将间隔为 2 个点的两点对之间建立一条边,然后是间隔为 3 的,直到边的数量到达 2 * n + p 为止
参考代码
1 #include <iostream>
2 #include <cstring>
3 #include <cstdio>
4
5 using namespace std;
6
7 int t, n, k;
8
9 void deal() {
10 for (int step = 1, cnt = 0; cnt < 2 * n + k; step ++) {
11 for (int i = 1; i <= n && cnt < 2 * n + k; i ++, cnt ++) {
12 int a = i, b = i + step;
13 if (b > n) b -= n;
14 printf("%d %d
", a, b);
15 }
16 }
17 }
18
19 int main() {
20 scanf("%d", &t);
21 for (int ca = 1; ca <= t; ca ++) {
22 scanf("%d%d", &n, &k);
23 deal();
24 }
25 return 0;
26 }