Codeforces 550D —— Regular Bridge——————【构造】
2 seconds
256 megabytes
standard input
standard output
An undirected graph is called k-regular, if the degrees of all its vertices are equal k. An edge of a connected graph is called a bridge, if after removing it the graph is being split into two connected components.
Build a connected undirected k-regular graph containing at least one bridge, or else state that such graph doesn't exist.
The single line of the input contains integer k (1 ≤ k ≤ 100) — the required degree of the vertices of the regular graph.
Print "NO" (without quotes), if such graph doesn't exist.
Otherwise, print "YES" in the first line and the description of any suitable graph in the next lines.
The description of the made graph must start with numbers n and m — the number of vertices and edges respectively.
Each of the next m lines must contain two integers, a and b (1 ≤ a, b ≤ n, a ≠ b), that mean that there is an edge connecting the verticesa and b. A graph shouldn't contain multiple edges and edges that lead from a vertex to itself. A graph must be connected, the degrees of all vertices of the graph must be equal k. At least one edge of the graph must be a bridge. You can print the edges of the graph in any order. You can print the ends of each edge in any order.
The constructed graph must contain at most 106 vertices and 106 edges (it is guaranteed that if at least one graph that meets the requirements exists, then there also exists the graph with at most 106 vertices and at most 106 edges).
- 1
- YES
2 1
1 2
In the sample from the statement there is a suitable graph consisting of two vertices, connected by a single edge.
题目大意:给你一个k。让你构造一个无向图,最少有一条桥,保证这个图中的所有顶点的度都为k。如果有这样的图,输出顶点数和边数,同时还有所有边的端点。
解题思路:首先我们证明k不能是偶数,假设结点u和v关于一条桥邻接,那么如果去掉该桥后,对于包含u结点的连通分量来说,只有u结点是奇数,那么这与连通分量中所有结点的度的和为偶数相矛盾,得证k只能为奇数。
讨论k为奇数:我们假定结点1是由桥所连接的结点,那么想让1结点度数为k,那么就要有k-1个结点与1邻接,我们假设是2->k,这k-1个结点就算是行成完全图也不能保证度数为k,所以需要加一个结点k+1,让k+1先与2->k这k-1个结点相连,但是k+1结点的度才为k-1,所以我们仍然需要加结点k+2,让k+2也与2->k都连接,同时让k+1与k+2连接。保证了k+1和k+2度都为k。但是这时候2->k这k-1个结点度数都才为3。如果让2->k这k-1个结点行成完全图,那么每个结点会增加k-2个度,但是现在需要每个结点增加k-3个度,所以需要每个结点减少1个度。我们可以假设删去2 -> 3, 4 -> 5,6->7.....这些边。到这里我们的构造算法已经结束了。
构造算法为:让1、k+1、k+2跟2->k这k-1个结点邻接,同时让2->k这k-1个结点形成完全图,但是删除env->env+1,env为2->k中所有偶数。同时桥所连接的那一边是对称的处理。
- #include<stdio.h>
- #include<algorithm>
- #include<string.h>
- #include<math.h>
- #include<string>
- #include<iostream>
- #include<queue>
- #include<stack>
- #include<map>
- #include<vector>
- #include<set>
- using namespace std;
- typedef long long LL;
- #define mid (L+R)/2
- #define lson rt*2,L,mid
- #define rson rt*2+1,mid+1,R
- #pragma comment(linker, "/STACK:102400000,102400000")
- const int maxn = 1e5 + 300;
- const int INF = 0x3f3f3f3f;
- typedef long long LL;
- typedef unsigned long long ULL;
- int main() {
- int k;
- scanf ( "%d", &k );
- if ( k == 1 ) {
- puts ("YES\n2 1\n1 2");
- }else if ( k % 2 == 0 ) {
- puts ( "NO" );
- }else {
- puts ( "YES" );
- printf ( "%d %d\n", 2*k + 4, k*(k+2) );
- for ( int i = 2; i <= k; i++ ) {
- printf ( "1 %d\n", i );
- }
- int nn = k + 2;
- for ( int i = 2; i <= k; i++ ) {
- printf("%d %d\n",i, k+1);
- printf("%d %d\n",i, k+2);
- for ( int j = i + 1; j <= k; j++ ) {
- if(i%2 == 0 && j == i+1) continue;
- printf ( "%d %d\n", i, j );
- }
- }
- printf ( "%d %d\n", k + 1, k + 2 );
- for ( int i = 2; i <= k; i++ ) {
- printf ( "%d %d\n", 1 + nn, i + nn );
- }
- for ( int i = 2; i <= k; i++ ) {
- printf("%d %d\n",i+nn, nn+k+1);
- printf("%d %d\n",i+nn, nn+k+2);
- for ( int j = i + 1; j <= k; j++ ) {
- if(i%2 == 0 && j == i+1) continue;
- printf ( "%d %d\n", i + nn, j + nn );
- }
- }
- printf ( "%d %d\n", k + 1 + nn, k + 2 + nn );
- printf ( "%d %d\n", 1, nn + 1 );
- }
- return 0;
- }
Codeforces 550D —— Regular Bridge——————【构造】的更多相关文章
- codeforces #550D Regular Bridge 构造
题目大意:给定k(1≤k≤100),要求构造一张简单无向连通图,使得存在一个桥,且每一个点的度数都为k k为偶数时无解 证明: 将这个图缩边双,能够得到一棵树 那么一定存在一个叶节点,仅仅连接一条桥边 ...
- 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 ...
- cf550D. Regular Bridge(构造)
题意 给出一个$k$,构造一个无向图,使得每个点的度数为$k$,且存在一个桥 Sol 神仙题 一篇写的非常好的博客:http://www.cnblogs.com/mangoyang/p/9302269 ...
- Codeforces 550 D. Regular Bridge
\(>Codeforces \space 550 D. Regular Bridge<\) 题目大意 :给出 \(k\) ,让你构造出一张点和边都不超过 \(10^6\) 的无向图,使得每 ...
- cf550D Regular Bridge
Regular Bridge An undirected graph is called k-regular, if the degrees of all its vertices are equal ...
- cf#306D. Regular Bridge(图论,构图)
D. Regular Bridge time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- D. Regular Bridge 解析(思維、圖論)
Codeforce 550 D. Regular Bridge 解析(思維.圖論) 今天我們來看看CF550D 題目連結 題目 給你一個\(k\le100\),請構造出一個至少有一個Bridge的,每 ...
- 「日常训练」Regular Bridge(Codeforces Round 306 Div.2 D)
题意与分析 图论基础+思维题. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB emplace_back #defi ...
- Codeforces 1383D - Rearrange(构造)
Codeforces 题面传送门 & 洛谷题面传送门 一道不算困难的构造,花了一节英语课把它搞出来了,题解简单写写吧( 考虑从大往小加数,显然第三个条件可以被翻译为,每次加入一个元素,如果它所 ...
随机推荐
- django drf 初探serializer
1.定义Model对应的serializer from rest_framework import serializers class GoodsSerializer(serializers.Seri ...
- MySQL分页查询存储过程
-- 分页查询delimiter $create procedure p_List(in i_Name varchar(50),in i_CName varchar(20),in pageIndex ...
- ASP.NET Core ASP.NET Core+MVC搭建及部署
ASP.NET Core+MVC搭建及部署 一.创建项目: 1.选择ASP.NET Core Web Application(.NET Core) 注意框架 2.选择Web Application: ...
- 881. Boats to Save People
The i-th person has weight people[i], and each boat can carry a maximum weight of limit. Each boat c ...
- gitlab迁移版本库(保留原版本库的所有内容)
如果你想从别的 Git 托管服务那里复制一份源代码到新的 Git 托管服务器上的话,可以通过以下步骤来操作. 1) 从原地址克隆一份裸版本库,比如原本托管于 GitHub git clone --ba ...
- scrapy框架基础
一.简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性 ...
- php中的list()用法中要注意的地方
php中list()函数是用数组对一列值进行赋值, 该函数只用于数字索引的数组,且假定数字索引从0开始.(这句话很重要,是从索引0开始为变量赋值,如果对应的数字索引不存在,则对应位的变量也为空值.) ...
- 虚拟机安装CentOS,网络配置
CentOS6和CentOS7,基础配置差不多. 安装CentOs6,过程:略: 安装完成后,系统默认启用动态ip,每次重启主机IP可能就会变化,搭配Xftp和Xshell工具会很难受,因此设置静态I ...
- PL/SQL数据开发那点事
PL/SQL开发那点事----->PL/SQL开发过程中异常处理 用户编写的PL/SQL块在执行过程中不可避免地要发生一些错误. 这里涉及的错误并不是由于程序的语法错误引起的,而是因为处理的数据 ...
- 2016级算法第三次上机-A.Bamboo的小吃街
A Bamboo的小吃街 分析 经典的两条流水线问题,题目描述基本类似于课件中的流水线调度,符合动态规划最优子结构性质 关键的动态规划式子为: dp[0][j] = min(dp[0][j - 1], ...