\(>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的更多相关文章

  1. D. Regular Bridge 解析(思維、圖論)

    Codeforce 550 D. Regular Bridge 解析(思維.圖論) 今天我們來看看CF550D 題目連結 題目 給你一個\(k\le100\),請構造出一個至少有一個Bridge的,每 ...

  2. 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 ...

  3. Codeforces 550D —— Regular Bridge——————【构造】

     Regular Bridge time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  4. cf#306D. Regular Bridge(图论,构图)

    D. Regular Bridge time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  5. Codeforces #550 (Div3) - G.Two Merged Sequences(dp / 贪心)

    Problem  Codeforces #550 (Div3) - G.Two Merged Sequences Time Limit: 2000 mSec Problem Description T ...

  6. cf550D Regular Bridge

    Regular Bridge An undirected graph is called k-regular, if the degrees of all its vertices are equal ...

  7. 「日常训练」Regular Bridge(Codeforces Round 306 Div.2 D)

    题意与分析 图论基础+思维题. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB emplace_back #defi ...

  8. codeforces #550D Regular Bridge 构造

    题目大意:给定k(1≤k≤100),要求构造一张简单无向连通图,使得存在一个桥,且每一个点的度数都为k k为偶数时无解 证明: 将这个图缩边双,能够得到一棵树 那么一定存在一个叶节点,仅仅连接一条桥边 ...

  9. Codeforces 5C Longest Regular Bracket Sequence(DP+括号匹配)

    题目链接:http://codeforces.com/problemset/problem/5/C 题目大意:给出一串字符串只有'('和')',求出符合括号匹配规则的最大字串长度及该长度的字串出现的次 ...

随机推荐

  1. luaj luaoc 回调函数传递的一些小总结

    问题场景:我们的游戏在支付时,由于第三方支付比较费时,可能在支付的过程中,我们lua写的cocos2dx项目会断网,我们的游戏有自动重连的机制.我就想,如果断线好了以后,支付完成了,那在断网之前传入的 ...

  2. Creating a new dynamic form project, business modeling.

    The domain logic is like there are a bunch of objects, as well as a lot of configurations, according ...

  3. 如果你也想写个完整的 Vue 组件项目

    1.一个完整的组件项目需要什么? 必要的: 组件构建方式 ( webpack / rollup 之类 ),并提供至少一个主流的输出格式 (ESModule) Demo 及 Demo 源码 文档,可以是 ...

  4. kolakoski序列

                   搜狐笔试=.= 当时少想一个slow的指针..呜呜呜哇的一声哭出来 function kolakoski(token0, token1) { token0 = token ...

  5. poj 1298 The Hardest Problem Ever

    题目链接:http://poj.org/problem?id=1298 题目大意:按照所给的顺序要求将输入的字符串进行排列. #include <iostream> #include &l ...

  6. 【Android XML】Android XML 转 Java Code 系列之 Selector(2)

    今天我们要把drawable下的selector的XML文件转换成Java代码.(打包进jar,不依赖apk) 在转换工具中的代码为: https://github.com/SickWorm/Andr ...

  7. python基础===理解Class的一道题

    解题如下: from random import randint class Die(): def __init__(self,sides=6): self.sides = sides def rol ...

  8. GOLANG编译安装

    GO这个编译器搞的比较混乱,GO本身是汇编+C开发出来的,后来因为觉得自己牛逼,然后用GO语言又写了一次编译器,所以中途抛弃了C,不过这种做法好与不好很难说,go真的这么有自信用自己语言写自己的编译器 ...

  9. C基础 多用户分级日志库 sclog

    引言 - sclog 总的设计思路 sclog在之前已经内置到simplec 简易c开发框架中一个日志库. 最近对其重新设计了一下. 减少了对外暴露的接口. 也是C开发中一个轮子. 比较简单, 非常适 ...

  10. [ Python ] 文件的读写操作

    1. 文件读写操作 读写文件是最常见的 IO 操作, Python 内置了读写文件的函数.在磁盘上读写文件的功能是由操作系统提供的,所以读写文件是请求操作系统打开一个文件对象(通常称为文件描述符),然 ...