codeforces 1066B(树)
时间:2022-07-28
本文章向大家介绍codeforces 1066B(树),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意描述
Ramesses knows a lot about problems involving trees (undirected connected graphs without cycles)!
He created a new useful tree decomposition, but he does not know how to construct it, so he asked you for help!
The decomposition is the splitting the edges of the tree in some simple paths in such a way that each two paths have at least one common vertex. Each edge of the tree should be in exactly one path.
Help Remesses, find such a decomposition of the tree or derermine that there is no such decomposition.
给一棵树,问可不可以讲树分解为链,任意两条链至少有一个交点
思路
通过观察发现,如果树本身是一条链,此时满足条件,直接输出树的根节点和尾结点即可。如果树是菊花图,即存在一个结点,与其他结点都联通,此时也满足条件,将各个链输出即可。如果有两个以上的度数为2的点,则无法分解。所以我们只需要统计每个点的度数,最后判断即可。
AC代码
#include<bits/stdc++.h>
#define x first
#define y second
#define IOS ios::sync_with_stdio(false);cin.tie(0);
using namespace std;
typedef unsigned long long ULL;
typedef pair<int,int> PII;
typedef pair<long,long> PLL;
typedef pair<char,char> PCC;
typedef long long LL;
const int N=3*1e5+10;
const int M=150;
const int INF=0x3f3f3f3f;
const int MOD=998244353;
int n;
int deg[N];
vector<int> node,leaves;
void solve(){
cin>>n;
for(int i=0;i<n-1;i++){
int x,y;cin>>x>>y;
deg[x]++;deg[y]++;
}
for(int i=1;i<=n;i++){
if(deg[i]==1) leaves.push_back(i);
else if(deg[i]>2) node.push_back(i);
}
if(node.size()>=2){
cout<<"No"<<endl;
return;
}
cout<<"Yes"<<endl;
if(!node.size()){
cout<<1<<endl;
cout<<leaves[0]<<' '<<leaves[1]<<endl;
}else{
cout<<leaves.size()<<endl;
for(int i=0;i<leaves.size();i++) cout<<node[0]<<' '<<leaves[i]<<endl;
}
}
int main(){
IOS;
solve();
return 0;
}
- Java魔法堂:解读基于Type Erasure的泛型
- spring cloud 学习(3) - feign入门
- Java集合源码分析(四)HashMap
- Java魔法堂:解读基于Type Erasure的泛型
- 显示mybatis的执行的sql
- spring cloud 学习(2) - eureka server注册中心高可用及安全认证
- mybatis在xml文件中处理大于号小于号的方法
- kafka集群部署
- Hadoop(九)Hadoop IO之Compression和Codecs
- 安卓第二夜 有趣的架构
- spring-boot 速成(12) - 如何注入多个redis StringRedisTemplate
- Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统
- 简明 Git 命令速查表
- spring cloud 学习(8) - sleuth & zipkin 调用链跟踪
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Shiro学习笔记四(Shiro集成WEB)
- Shiro学习笔记五(Shiro标签,及通配符)
- Shiro学习笔记六(自定义Reaml-使用数据库设置 user roles permissions)
- Luncene学习 第一天 《入门程序》
- Luncene学习二《搜索索引》
- JavaWeb--简单分页技术
- 使用Python制作第一个爬虫程序
- 使用BeautifulSoup 爬取一个页面上的所有的超链接
- 使用PlaceHolder,测试碰见的问题
- 隐藏MySQL InnoDB Cluster / ReplicaSet实例
- MySQL8.0.21——错误日志中的组复制系统消息
- 【一】、搭建Hadoop环境----本地、伪分布式
- 在组复制中指定恢复IP地址
- START GROUP_REPLICATION可以将恢复凭据作为参数
- MySQL Shell转储和加载第1部分:演示!