cf981cusefuldecomposition树/思维(代码片段)

Roni Roni     2022-11-20     376

关键词:

【链接】: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(菊花图的性质)(代码片段)

题目描述RAMESS知道很多关于树的问题(无循环的无向连通图)!他创建了一个新的有用的树的划分,但他不知道如何构造它,所以他请求你的帮助!划分是从树上的边中分裂出一些简单的路径,使得每个两条路径都具有至少一个... 查看详情

cf981f.roundcf(二分+hall定理)(代码片段)

(刚做完昨天的计划,摸了一天鱼题目大意:一个环上给定n对新郎新娘的可站的位置,求所有夫妻间距离最大值的最小值思路:二分+Hall定理最大值的最小值,二分答案。显然这是张二分图,朴素的check... 查看详情

昂达v981平板刷机教程连接

http://tieba.baidu.com/p/3721193574http://www.ondabbs.cn/forum.php?mod=viewthread&tid=65393http://cs.onda.cn/Tablet/ProductInfo.aspx?ProductId=375&d=downhttp://www.ondabbs.cn/forum.php?mod=vie 查看详情

文巾解题981.基于时间的键值存储(代码片段)

1题目描述、 2解题思路创建两个字典,它们有相同的键,键值分别是value和timestamp然后get的时候,我先用二分查找最大的timestamp_prev的下标,然后用这个下标定位到相应的value值classTimeMap(object):def__init__(self):""... 查看详情

leetcode981.基于时间的键值存储/274.h指数/275.h指数ii(代码片段)

981.基于时间的键值存储2021.7.10每日一题题目描述创建一个基于时间的键值存储类TimeMap,它支持下面两个操作:1.set(stringkey,stringvalue,inttimestamp)存储键key、值value,以及给定的时间戳timestamp。2.get(stringkey,inttimestamp)返回... 查看详情

lc981.timebasedkey-valuestore(代码片段)

Createatimebasedkey-valuestoreclass TimeMap,thatsupportstwooperations.1. set(stringkey,stringvalue,inttimestamp)Storesthe key and value,alongwiththegiven timestamp.2. get(stringkey,inttimestamp)Returnsavaluesuchthat set(key,value,timestamp_prev) wascalled... 查看详情

[mstl]lc981.基于时间的键值存储(设计+哈希表+map二分查找+代码技巧)(代码片段)

文章目录1.题目来源2.题目解析1.题目来源链接:981.基于时间的键值存储2.题目解析表套表解决。map<string,map<int,string,greater<int>>>mp;key,time,value这里使用了map的第三个参数,使time降序排。貌似外部的不需要使用... 查看详情

uml软件需求说明书(代码片段)

目录🦁故事的开端一.🦁引言1.1编写目的1.2背景1.3定义1.4参考资料二.🦁任务概述2.1目标2.2用户的特点2.3假定和约束三.🦁需求规定3.1功能性需求3.1.1系统用例图3.1.2用户登录用例3.1.3学员注册用例3.1.4学员修改个人... 查看详情

981统计利用二叉树存储的森林中树的棵数(代码片段)

  求用二叉树存储的森林中树的棵数,我们首先需要的是将二叉树转换为森林。  那么如何计算二叉树存储的森林中树的棵数?  有这么一个森林与二叉树转换规则:    从二叉树根开始一直往右子树走,一共路过几... 查看详情

springboot|邮箱发送验证码,你会了吗?(代码片段)

目录🦁题外话🦁提前准备2.1配置邮箱第三方登录2.1.1点击设置——账户2.1.2开启POP3/SMTP服务2.2添加依赖2.3yaml配置🦁进入主题🦁测试使用🦁尾声3.1安利一个生成验证码的工具类3.1.1添加依赖3.1.2编写配置类3.1.3... 查看详情

leetcode981基于时间的键值存储[map]heroding的leetcode之路(代码片段)

解题思路:本题的关键在于如何存储,一个是key对应一个value,一个是value对应一个时间,那么很明显可以使用双重Map,外面的map是key对应一个map,里面的map是时间对应value,在get函数中,先key有没... 查看详情

avitocodechallenge2018(代码片段)

...过两天吧剩下的五题给补上。 http://codeforces.com/contest/981A:给你一个字符串S,求把这个字符串中的最长不回文子序列。思路:如果S不回文,那就是本身如果S回文:  (1 查看详情

spring难理解的aop编程|入门?(代码片段)

...每一步,幸运之神自然会驾凌在你的身上目录一.🦁前言二.🦁常见概念2.1常见术语2.2AOP入门Ⅰ.🐇功能场景Ⅱ.🐇实现过程2.3通知类型Ⅰ.🐇编写通知方法Ⅱ.🐇编写切面Ⅲ.🐇测试三.🦁切点表... 查看详情

基于springboot+mybatis的图书购物网站(代码片段)

目录一.🦁前言1.1研究目的和意义1.2所做的主要工作二.🦁技术介绍2.1B/S结构2.2MySQL介绍2.3Java介绍2.4Springboot框架及特点2.5Mybatis框架特点三.🦁系统功能结构1.1用户管理功能1.2管理员管理功能四.🦁系统功能展示Ⅰ.... 查看详情

opencv车牌自动识别算法的设计与实现(代码片段)

写目录一.🦁设计任务说明1.1主要设计内容1.1.1设计并实现车牌自动识别算法,基本功能要求1.1.2参考资料1.1.3参考界面布局1.2开发该系统软件环境及使用的技术说明1.3开发计划二.🦁系统设计2.1功能分析2.1.1车辆图像获... 查看详情

如何更改因子级别的名称?

】如何更改因子级别的名称?【英文标题】:Howtochangenameoffactorlevels?【发布时间】:2015-06-2500:07:30【问题描述】:训练集trainSample<-cbind(data[1:980,1],data[1:980,2])cl<-factor(c(data[1:980,3]))测试集testSample<-data(data[981:1485,1],data[981:1485, 查看详情

hashmap|深度剥析javase源码合集ⅱ|你会吗?(代码片段)

目录一.🦁HashMap介绍1.1特点1.2底层实现二.🦁结构以及对应方法分析2.1结构组成2.1.1成员变量2.1.2存储元素的节点类型2.1.2.1链表Node类2.1.2.2树节点类2.1.2.3继承关系2.2方法实现2.2.1HashMap的数组初始化2.2.2计算hash值2.2.3添加元... 查看详情

存储与虚拟机主机管理

650)this.width=650;"title="图片1.png"src="https://s3.51cto.com/wyfs02/M01/9F/66/wKioL1mcKR3wXRzmAABmV_MKQUw981.png-wh_500x0-wm_3-wmp_4-s_3667109375.png"alt="wKioL1mcKR3wXRzmAABmV_MKQUw981.png-wh_50"/>通过 查看详情