题解 [CF1682D] Circular Spanning Tree
Codeforces link
Luogu link
题解 CF1682D
Part 0. 无解情况
首先考虑无解情况。
首先,若 sss 中 1\texttt{1}1 的个数是奇数,肯定无解。
其次,树肯定是有叶子的,而叶子的度数肯定是 111,所以若 sss 中没有任何一个 1\texttt{1}1,也无解。
其余情况都有解。
Part 1. 含有偶数度数节点的情况
我们可以把序列拆分成若干个 [0,0,...,0,1][\texttt0,\texttt0,...,\texttt0,\texttt1][0,0,...,0,1] 的子序列(单独的 1\texttt11 也可以作为一个子序列)。注意这是个环,所以序列首尾相接。然后任意挑出一个位于某个子序列首的 0\texttt00 作为根。接下来:
- 每个序列连成一条链;
- 每个序列的第一个元素接上根节点。
因为 1\texttt11 有偶数个,所以链也有偶数条,从而根节点的度数也是偶数,符合题意。
Part 2. 不含有偶数度数节点的情况
任意挑一个节点为根,构造菊花图即可。
//CF1682D
#include <cstdio>const int N = 2e5 + 10;
int t, n;
char s[N];int main(){scanf("%d", &t);while(t--){scanf("%d%s", &n, s+1);int cnt = 0;for(int i = 1; i <= n; ++ i){if(s[i] == '1'){++ cnt;}}if(cnt == 0 || cnt & 1){puts("NO");continue;}puts("YES");if(cnt == n){for(int i = 2; i <= n; ++ i){printf("1 %d\n", i);}continue;}int st = 0;if(s[n] == '1' && s[1] == '0'){st = 1;} else {for(int i = 1; i <= n; ++ i){if(!st && s[i] == '0' && s[i-1] == '1'){st = i;}}}#define pre(i) (i==1 ? n : i-1)#define nxt(i) (i==n ? 1 : i+1)bool flg = true;for(int i = st+1; flg || i < st; ++ i){if(i == n+1){i = 1;if(st == 1) break;flg = false;}if(pre(i) == st || s[pre(i)] == '1'){printf("%d %d\n", i, st);}if(s[i] == '0'){printf("%d %d\n", i, nxt(i));}}}return 0;
}
题解 [CF1682D] Circular Spanning Tree相关推荐
- Minimum spanning tree HDU - 6954
Minimum spanning tree HDU - 6954 题意: 给定n-1个点,编号从2到n,两点a和b之间的边权重为lcm(a,b).请找出它们形成的最小生成树. 2<=n<= ...
- 2021ICPC(澳门) - LCS Spanning Tree(广义后缀自动机)
题目链接:点击查看 题目大意:给出一个含有 nnn 个点的无向图,点权为一个字符串,每条边的边权为相邻两点的 LCSLCSLCS,本题的 LCSLCSLCS 定义为两个字符串的最长公共子串的长度 求出 ...
- 2019ICPC(上海) - Spanning Tree Removal(构造)
题目链接:点击查看 题目大意:给出一个 nnn 个点的无向完全图,每次操作可以删掉包含 nnn 个点的一棵生成树中的所有边,问最多可以删几次 题目分析:典中典之欧拉通路构造题,构造方式如下: 在选定某 ...
- Spanning Tree Protocol介绍
Spanning Tree Protocol(STP)主要是用在网桥上,用来避免网络回路,并制造冗余连接(也就是保证网络的可靠性). 这里只是一个大概的介绍,具体的还是要去看IEEE 的 802.1D ...
- Directed Minimum Spanning Tree: Chu-Liu/Edmonds Algorithm
我们的现代数据库大作业要求实现一个图查询系统,包括基于属性的子图查询.可达性查询(可选).最短路径查询(可选).TopK最短路径查询(可选).图形化展示(可选)等功能.分成子图同构查询小组以及可达性及 ...
- 《Boost》Part1 Minimum Spanning Tree
<Boost>Part1 Minimum Spanning Tree 1.Boost中的最小生成树介绍 MST最小生成树,是图论中的基本算法,还有一种是最大生成树,此处暂不介绍. 最小生成 ...
- 数据结构与算法笔记:贪心策略之BSTBBST, Hashtable+Dictionary+Map, Priority Queue~Heap, Minium Spanning Tree
BST & BBST BST(Binary Search Tree) 二叉搜索树,也就是使用二叉树来做查找 BBST(Balanced Binary Search Tree) 平衡二叉搜索树 ...
- 【Codeforces Round #544 (Div. 3) F2. Spanning Tree with One Fixed Degree】DFS
F2. Spanning Tree with One Fixed Degree 题意 给你nnn个点mmm条边的无向联通图,找出一棵生成树,使111这个点的度=d=d=d. 1≤n,m≤1051 \l ...
- 计算机网络之STP(Spanning Tree Protocol)生成树协议详解及其实验配置
目录 1.STP概念 1.1 STP选举过程 1.1.1 根桥和根端口的选举 1.1.2 端口角色的选举 2.STP端口状态解释及转换 2.1 STP的五种端口状态 2.2 STP过程中的两种常见问 ...
- 第十三章 ALDS1_12_A:Minimum Spanning Tree 最小生成树
知识点 树是没有环的图 在树中,任意顶点r和顶点v之间必然存在着1条路径 生成树:拥有图G的所有顶点,并且在保证自身是树的前提下拥有尽量多的边. 最小生成树(MST):个边权值总和最小的生成树 普里姆 ...
最新文章
- 用思维导图做的求婚计划,哈哈哈
- 包邮免费送2022年科研人专属趣味台历,微科盟年终福利,错过悔一年!
- printf函数输出超出int时怎么办
- 浏览器兼容问题 透明度 position:fixed bootstrap
- 【转】从TXT导入到dataGridView
- 有参组装新转录本cufflinks_RNA-Seq流程(cutadapt-tophat2-cufflinks)
- linux备份根目录与还原脚本,Shell脚本备份和还原MBR(主引导记录)
- 计算机毕业设计源码—SpringBoot+Vue疫情防控管理系统
- ureport2使用
- ffmpeg处理——*.flv视频文件和*.ass字幕文件合并成mp4
- python 读取geotiff_python gdal 写GeoTiff文件
- mysql如何找回误删除数据_mysql如何找回误删除数据
- 魔百盒CM211-1-晶晨S905L3B芯片系列-红外蓝牙线刷固件及教程
- Wireshark抓取ping包
- css grid布局中的minmax()函数的使用
- 040 字符升序排列
- Lasso 和 Ridge回归中的超参数调整技巧
- jquery国际化 i18n.js
- 《第一行代码》学习笔记——第1章 开始启程,你的第一行Android代码
- Modern GMT Series:Slice in 3D View (三维切片图)