CF981C Useful Decomposition【树/思维】
【链接】:CF
【题意】:给定一棵树,要求拆成若干条简单路径,并且这些路径都经过一个公共节点。给出任意一个解决方案,如不存在输出No。
【分析】:
因为是一棵树, 所以如果要求任意两条路线至少有一个公共点, 到最后, 所有的路线都会有唯一的公共点. 如果有两个公共点的话, 就至少有两条路线只包含其中的一条路线, 否则就会有环, 有了环就不是树了.
也就是说, 所有的点, 除了那个唯一的公共点, 必须度数小于 2 .
在所有点之中:
度数为 1 的点是路线的一个端点.
度数为 2 的是一条路线中除了两端以外的点.
度数大于 2 的是路线的公共点. 如果有两个及以上的点的度数是大于 2 的, 代表不可能路线中任意两条至少交于一点, 输出 No.
如果没有度数大于 2 的点, 代表只有一条路线.
如何输出路线:
先输出 Yes, 代表可以将树分解.
接着输出路线的个数, 也就是度数为 1 的点的个数.
接着, 对于每条路线, 输出其中一个度数为 1 的点和 唯一的 公共点.
注意: 如果没有度数大于 2 的点, 代表只有一条路线, 此时路线个数并不等于度数为 1 的点的个数, 并且端点就是两个度数为 1 的点.
【代码】:
#include <bits/stdc++.h>
using namespace std;
int n;
int deg[100005]; // 每个点的度数
int leaves[100005], comv[100005]; // leaves 存储度数为 1 的端点, comv 存储公共点
int nleaf = 0, ncomv = 0; // 存储度数为 1 的点与公共点的数量
int x,y;
/*
有三种可能情况:
所有链在某一点上相交,也就是只有一个点度数>2;
只有一条链,就是两个点度数为1,其他点度数为2;
不符合要求的情况,就是有超过一个点度数>2
*/
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
deg[x]++,deg[y]++;
}
for(int i=1;i<=n;i++)
{
if(deg[i]==1) leaves[++nleaf]=i;
else if(deg[i]>2) comv[++ncomv]=i;
}
//如果公共点不唯一, 就输出 "No"
if(ncomv>1) {printf("No\n");return 0;}//不符合要求的情况,就是有超过一个点度数>2
printf("Yes\n");
// 如果只有一条路线, 就输出两端 (即两个度数为 1 的点)
if(ncomv==0) printf("1\n%d %d\n",leaves[1],leaves[2]);//只有一条链,就是两个点度数为1,其他点度数为2;
else//所有链在某一点上相交,也就是只有一个点度数>2;
{
printf("%d\n",nleaf);//度数为1的点的个数
for(int i=1;i<=nleaf;i++)
{
printf("%d %d\n",comv[1],leaves[i]);//公共点与一个度数为1的点
}
}
return 0;
}
CF981C Useful Decomposition【树/思维】的更多相关文章
- CF981C Useful Decomposition 树 dfs 二十三 *
Useful Decomposition time limit per test 1 second memory limit per test 256 megabytes input standard ...
- 【插队问题-线段树-思维巧妙】【poj2828】Buy Tickets
可耻的看了题解 巧妙的思维 逆序插入,pos 代表的意义为前面要有pos个空格才OK: 证明:仔细思考一下就觉得是正确的,但是要想到这种方式还是要很聪明,空格是前面的几个数字所形成的,所以要特地留出来 ...
- BZOJ 4552(二分+线段树+思维)
题面 传送门 分析 此题是道好题! 首先要跳出思维定势,不是去想如何用数据结构去直接维护排序过程,而是尝试二分a[p]的值 设二分a[p]的值为x 我们将大于x的数标记为1,小于等于x的数标记为0 则 ...
- Choosing The Commander CodeForces - 817E (01字典树+思维)
As you might remember from the previous round, Vova is currently playing a strategic game known as R ...
- Ciel the Commander CodeForces - 321C (树, 思维)
链接 大意: 给定n结点树, 求构造一种染色方案, 使得每个点颜色在[A,Z], 且端点同色的链中至少存在一点颜色大于端点 (A为最大颜色) 直接点分治即可, 因为最坏可以涂$2^{26}-1$个节点 ...
- hdu 4747 mex 线段树+思维
http://acm.hdu.edu.cn/showproblem.php?pid=4747 题意: 我们定义mex(l,r)表示一个序列a[l]....a[r]中没有出现过得最小的非负整数, 然后我 ...
- HDU - 6315 Naive Operations (线段树+思维) 2018 Multi-University Training Contest 2
题意:数量为N的序列a和b,a初始全为0,b为给定的1-N的排列.有两种操作:1.将a序列区间[L,R]中的数全部+1:2.查询区间[L,R]中的 ∑⌊ai/bi⌋(向下取整) 分析:对于一个位置i, ...
- luogu P4137 Rmq Problem / mex 主席树 + 思维
Code: #include<bits/stdc++.h> #define maxn 200001 using namespace std; void setIO(string s) { ...
- Uoj #218. 【UNR #1】火车管理 可持久化线段树+思维
Code: #include<bits/stdc++.h> #define maxn 500005 using namespace std; int n,Q,ty,lastans=0; i ...
随机推荐
- Linux SNMP 监控一些常用OID
Linux SNMP 监控一些常用OID ===============linux服务器snmp常用oid http://www.haiyun.me/archives/linux-snmp-oid.h ...
- [Leetcode] Merge two sorted lists 合并两已排序的链表
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...
- 【POJ 3169 Layout】
Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 12565Accepted: 6043 Description Like every ...
- 如何配置开源中国Maven库以加快依赖包下载速度
有时有某些地方由于网络问题,访问maven主仓库比较慢,甚至有可能无法下载某些jar包,此时可以把开源中国Maven库配置到settings.xml文件中,加快依赖包的下载速度. 具体如何配置? 在m ...
- python3创建目录
感觉python3最好用的创建目录函数是os.makedirs,它可以设置在多级目录不存在时自动创建,已经存在也不抛出异常. import os os.makedirs('hello/hello1/h ...
- [fzu 2271]不改变任意两点最短路至多删的边数
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2271 题目中说每条边的边权都是[1,10]之间的整数,这个条件非常关键!以后一定要好好读题啊…… 做10次循环 ...
- Spring随笔 —— IOC配置的三种不同方式简介
在spring framework中,IOC的配置是最基础的部分,常见的配置方式有基于xml文件和基于注解的配置方式.除了这两种配置方式之外,今天这里再介绍另一种配置方式,先用小demo重温下我们熟悉 ...
- Java Error: Failed to validate certificate. The application will not be executed
Hi, last week a customer had the problem that he wants to connect to the administration interface of ...
- powercmd注册码
推荐一个很方便的软件:powercmd 用户名:nzone 注册码:PCMDA-86128-PCMDA-70594 . 下载地址网上很多: http://soft.hao123.com/soft/a ...
- [codevs3160]最长公共子串解题报告|后缀自动机
给出两个由小写字母组成的字符串,求它们的最长公共子串的长度. 样例就觉得不能更眼熟啊...好像之前用后缀数组做过一次 然后发现后缀自动机真的好好写啊...(当然当时学后缀数组的时候也这么认为... 这 ...