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 题目大意:给出一串字符串只有'('和')',求出符合括号匹配规则的最大字串长度及该长度的字串出现的次 ...
随机推荐
- arch中pacman的使用
Pacman 是archlinux 下的包管理软件.它将一个简单的二进制包格式和易用的构建系统结合了起来.不管软件包是来自官方的 Arch 库还是用户自己创建,Pacman 都能方便得管理. pacm ...
- Python脚本 - 查询磁盘的读写次数信息
测试系统为:Centos 6.7 Python版本为: 3.6.4 脚本功能:查看指定磁盘的读写及时间等相关信息 #!/usr/bin/env python3 from collections imp ...
- C/C++中手动获取调用堆栈【转】
转自:http://blog.csdn.net/kevinlynx/article/details/39269507 版权声明:本文为博主原创文章,未经博主允许不得转载. 当我们的程序core掉之后, ...
- 110.Balanced Binary Tree---《剑指offer》面试39
题目链接 题目大意:判断一个二叉树是否是平衡二叉树. 法一:dfs.利用求解二叉树的高度延伸,先计算左子树的高度,再计算右子树的高度,然后两者进行比较.o(nlgn).代码如下(耗时4ms): pub ...
- 2017中国大学生程序设计竞赛 - 网络选拔赛 HDU 6150 Vertex Cover 二分图,构造
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6150 题意:"最小点覆盖集"是个NP完全问题 有一个近似算法是说—每次选取度数最大 ...
- [How to] UILocalNotification 的使用
1.简介 IOS共分为本地和远程通知两种通知,本问介绍本地通知UILocalNotification的基本使用方法. 2.本地通知的实现: 步骤一:新建工程 在Xcode中新建一个single vie ...
- Can't load standard profile: GRAY.pf
报错: java.lang.IllegalArgumentException: Can't load standard profile: GRAY.pf at java.awt.color.ICC_P ...
- 3:django models Making queries 高级进阶--聚合运算
在前一遍文章django models Making queries里面我们提到了django常用的一些检索数据库的内容, 下面我们来看一下更为高级的检索聚合运算 这是我们要用到的模型 class A ...
- 面试题之堆栈队列系列一:设计包含min函数的栈
编译环境 本系列文章所提供的算法均在以下环境下编译通过. [算法编译环境]Federa 8,linux 2.6.35.6-45.fc14.i686 [处理器] Intel(R) Core(TM)2 Q ...
- 多路复用I/O模型select() 模型 代码实现
多路复用I/O: socket编程之select(),poll(),epoll() 代码: client.c #include <stdio.h> #include <sys/ty ...