Codeforces 550 D. Regular Bridge
\(>Codeforces \space 550 D. Regular Bridge<\)
题目大意 :给出 \(k\) ,让你构造出一张点和边都不超过 \(10^6\) 的无向图,使得每个点的度数都为 \(k\) 且至少有一条桥边。
\(1≤ k ≤ 100\)
解题思路 :
通过观察可以发现当 \(k\) 为偶数的时候必然无解
证明:先假设当 \(k\) 是偶数的时候可以构造出来。 那么对于这张图的每一条桥边,必然连接这两个联通块,那么单独考虑这两个联通块,有且仅有一个端点的度数是 \(k - 1\) ,其他点的度数都是 \(k\) 所以这个联通块的总度数为 \(kx - 1 (x > 0 )\) 因为k是偶数,所以总度数为奇数。但是对于任意一个无向图,它的度数之和都是偶数,所以产生矛盾,当 \(k\) 为偶数的情况下不存在解
考虑当 \(k\) 是奇数的时候如何构造这张图。
观察发现桥边的条数并不影响构造,所以可以只构造一条桥边的情况
问题就转化为构造两个子图,有一个点的度数为 \(k - 1\) 其余点的度数都为 \(k\)
按照这个方式画出 \(k = 3\) 的情况如下
观察发现,对于每一个联通块,有 \(k-1\) 个点连向桥边端点,对于这 \(k-1\) 个点,每个点都连向另外 \(k-1\) 个点
由于 \(k\) 是奇数,\(k - 1\) 是偶数,所以另外 \(k - 1\) 个点可以相邻两两连边产生额外 \(1\) 的度数
加上连向桥边的 \(k - 1\) 个点提供的度数刚好是 \(k\) 所以按照 \(k = 3\) 的情况画可以推广到所有 \(k\) 是奇数的情况
由此可以得出构建方法 :
先构建一条桥边,对于两个端点分别做同样操作:
新建 \(k-1\) 个点,每个点向端点连边
再新建 \(k - 1\) 个点,每个点向相邻的点连边
对于两层点形成的二分图,两两之间连边
/*program by mangoyang*/
#include<bits/stdc++.h>
#define inf (0x7f7f7f7f)
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
typedef long long ll;
using namespace std;
template <class T>
inline void read(T &x){
int f = 0, ch = 0; x = 0;
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = 1;
for(; isdigit(ch); ch = getchar()) x = x * 10 + ch - 48;
if(f) x = -x;
}
vector<int> g[100005]; int m, k;
inline void makemid(int type){
int rt = 1 + type;
for(int i = 1; i < k; i++) g[rt].push_back(rt + i), m++;
for(int i = rt + 1; i < rt + k; i++)
for(int j = rt + k; j < rt + 2 * k - 1; j++) g[i].push_back(j), m++;
for(int j = rt + k; j < rt + 2 * k - 1; j += 2) g[j].push_back(j + 1), m++;
}
int main(){
read(k);
if(k % 2 == 0) return puts("NO"), 0;
makemid(0), makemid(2 * k - 1); g[1].push_back(2 * k), m++;
puts("YES");
cout << 4 * k - 2 << " " << m << endl;
for(int i = 1; i <= 4 * k - 2; i++)
for(int j = 0; j < g[i].size(); j++) cout << i << " " << g[i][j] << endl;
return 0;
}
Codeforces 550 D. Regular Bridge的更多相关文章
- D. Regular Bridge 解析(思維、圖論)
Codeforce 550 D. Regular Bridge 解析(思維.圖論) 今天我們來看看CF550D 題目連結 題目 給你一個\(k\le100\),請構造出一個至少有一個Bridge的,每 ...
- Codeforces Round #306 (Div. 2) D. Regular Bridge 构造
D. Regular Bridge Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/550/pro ...
- Codeforces 550D —— Regular Bridge——————【构造】
Regular Bridge time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- cf#306D. Regular Bridge(图论,构图)
D. Regular Bridge time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- Codeforces #550 (Div3) - G.Two Merged Sequences(dp / 贪心)
Problem Codeforces #550 (Div3) - G.Two Merged Sequences Time Limit: 2000 mSec Problem Description T ...
- cf550D Regular Bridge
Regular Bridge An undirected graph is called k-regular, if the degrees of all its vertices are equal ...
- 「日常训练」Regular Bridge(Codeforces Round 306 Div.2 D)
题意与分析 图论基础+思维题. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB emplace_back #defi ...
- codeforces #550D Regular Bridge 构造
题目大意:给定k(1≤k≤100),要求构造一张简单无向连通图,使得存在一个桥,且每一个点的度数都为k k为偶数时无解 证明: 将这个图缩边双,能够得到一棵树 那么一定存在一个叶节点,仅仅连接一条桥边 ...
- Codeforces 5C Longest Regular Bracket Sequence(DP+括号匹配)
题目链接:http://codeforces.com/problemset/problem/5/C 题目大意:给出一串字符串只有'('和')',求出符合括号匹配规则的最大字串长度及该长度的字串出现的次 ...
随机推荐
- Android中TextView设置字体
最近项目中出现把字体设置成宋体,微软雅黑,黑体,楷体等的需求; 度娘发现Android系统默认支持三种字体,分别为:“sans”, “serif”, “monospace",除此之外还可以使 ...
- EditText中inputType详解
<EditText Android:layout_width="fill_parent" android:layout_height="wrap_content&q ...
- ctsc&apio2018八日游
day0: 早就知道自己是打酱油的..早就做好了打铁的准备.. Q:那你来干嘛 A:当然是来玩啊!!玩啊!啊!! emmmmm 抱着半期考不及格的卷子瑟瑟发抖地上了飞机. day1:报道!当然还有在宾 ...
- AGC025简要题解
AGC025简要题解 B RGB Coloring 一道简单题,枚举即可. C Interval Game 考虑可以进行的操作只有两种,即左拉和右拉,连续进行两次相同的操作是没有用的. 左拉时肯定会选 ...
- 多表数据转化器MTDC
需求 根据配置文件的映射规则,将一种模型和数据映射成另外一种模型和数据.如图: 其中,a1,b1,c1,d1为表主键,关系:A.a1=B.b1=C.c2=D.d1 解决思路 解析模型配置文件,将每个转 ...
- ImportError: libQtTest.so.4: cannot open shared
错误: import cv2 File , in <module> from .cv2 import * ImportError: libQtTest.so.: cannot open s ...
- docker数据管理--数据卷的备份
/* 先在宿主机创建一个备份的文 件夹, 然后将其以另外一个名字的目录挂载到容器里, 此时不管容器里,或宿主机里做什么操作, 数据都会及时更新,并得到备份. */ [root@localhost ~] ...
- git学习笔记三
1.每个分支的历史版本维护信息位置是.git/logs/refs/heads/master,这个位置的信息是文本文件,不是引用. harvey@harvey-Virtual-Machine:~/dem ...
- Prometheus exporter的Node exporter是可以独立安装,用来测试的
现在慢慢在把prometheus operator的一些概念组织完整. https://github.com/coreos/prometheus-operator/tree/master/contri ...
- 排序算法总结(C语言版)
排序算法总结(C语言版) 1. 插入排序 1.1 直接插入排序 1.2 Shell排序 2. 交换排序 2.1 冒泡排序 2.2 快速排序 3. 选择 ...