Cover the Tree

文章目录

  • 题意:
  • 题解:
  • 代码

题意:

一个无向树,选择最少数量的链子,能将树上所有边覆盖,答案不唯一
(1≤n≤2×105
链子就是两点之间的边
看看样例
输入

5
1 2
1 3
2 4
2 5

输出

2
2 3
4 5

一种情况如图所示:
所有边被覆盖的链子有:
链子2->3:覆盖了边1-2,1-3
链子4->5:覆盖了边4-2,2-5

题解:


上述文字看不懂也没关系,我也不大懂,我结合题解谈谈我的认识
所用知识:
dfs序讲解
题目要求我们找链,链有两个端点,其实说白了就是在树上两两找点,让他们匹配,要覆盖所有边
如果有x个叶子节点,那我们最少的子链也要是(x/2)向上取整(不然不能覆盖所有与叶子节点相连的边)
我们让根左子树的叶节点和根右子树的叶节点一一配对,如果叶节点是奇数个的话,再任意找一个节点与之配对即可。

如果任意叶子节点匹配
如图
很容易造成遗漏,比如1——3这条边就没有,

所以我们要按照每种特定的顺序来实现不遗漏,而且所用链不多

我们用dfs序对每个点进行编号,让x与x+(n/2)交叉匹配,这样就不重复了,
最后跑一遍dfs序,记录一下叶子节点出现的位置进行输出

代码

#include<bits/stdc++.h>
#include<vector>
using namespace std;
const int maxn=2e5+7;
vector<int> vec[maxn];
vector<int>sum;
void dfs(int x,int pre)
{  if(vec[x].size()==1)sum.push_back(x);//将每个叶子节点存放入 for(auto i:vec[x]){if(i==pre)continue;dfs(i,x);}
}
int main()
{int n;cin>>n;for(int i=1;i<n;i++){int u,v;cin>>u>>v;vec[u].push_back(v);vec[v].push_back(u);}int root=1;while(vec[root].size()==1)root++;//我们要选的根节点不能只连接一个边dfs(root,-1);//dfs序 int size=sum.size();int ant=(size+1)/2;//另一个点的编号 cout<<ant<<endl;if(size&1)sum.push_back(root);//如果奇数个点,则将根和多的叶子节点匹配 for(int i=0;i<ant;i++){cout<<sum[i]<<" "<<sum[i+ant]<<endl;}return 0; }

Cover the Tree(2020多校第二场C)相关推荐

  1. Fake Maxpooling(2020多校第二场F)

    Fake Maxpooling(2020多校第二场F) 文章目录 题意: 题解: 代码: 题意: 一个n * m的矩阵,第i行第j列的值是lcm(i,j),然后给定一个 k * k的子矩阵(k< ...

  2. Duration(2020多校第二场D)

    Duration(2020多校第二场D) 文章目录 题意 题解 代码 首先,非常感谢出题人出这个题,避免了我全wa的尴尬 题意 求两个时间相差多少秒,两个时间为同一天 题解 全部转化成秒,然后求差 代 ...

  3. Boundary(2020多校第二场B)

    Boundary(2020多校第二场B) 文章目录 题意: 题解: 思路1: 代码: 思路二 代码 题意: 坐标平面有n个点(不与原点(0,0)重复),现考虑一个圆,(0,0)点在圆的边界,问这个圆的 ...

  4. HDU 2020 多校第二场 游记

    咕了整整一天才来写 2333 这次邓老师没来 /kk,不过打的还算不错,可惜还是有一题没调出来,不然就是 11 题队了 /ll 1001 题意好像有点奇怪,不过 djq 还是一眼看对了,拿了这题一血. ...

  5. 2021牛客暑假多校第二场 K题—Stack (链表)

    2021牛客暑假多校第二场 K题-Stack 题意: 一个单调栈,给你第n次操作时里面数据的数量,让你给出里面塞入的会是哪些数字. 主要思想:链表模拟 (代码里面有注释) (题解一开始说的是拓扑,后来 ...

  6. 牛客多校第二场补题(继续罚坐)

    牛客多校第二场(继续罚坐场) Draw Grids ZYT和LBC玩游戏,在4*4的矩阵中,从起点开始,每个人只能连一条直线,且只能在起点或者上一个人的终点位置连上这个位置相邻的一条直线,并且不能形成 ...

  7. 【多校训练】2021牛客多校第二场

    [前言] 这是打的第二场,rk39,但是AB这两个比较简单的题都没做emm,大概还是磨合的不够.然后感觉对于阈值类的东西还不是很敏感,应该看到不太好做就直接去想这种阈值的.校内3/9(然后就开启了常年 ...

  8. 2020牛客暑假多校第二场补题

    比赛链接:link 题目 A kmp + Hash B 几何 C dfs D 签到题 F 单调区间 + gcd筛 G bitset神奇用法 H 权值线段树(动态开点/离散化) J 群论     A k ...

  9. 2020杭电多校第二场 Lead of Wisdom(爆搜)

    Problem Description In an online game, "Lead of Wisdom" is a place where the lucky player ...

最新文章

  1. R语言ggplot2可视化改变图中线条的透明度级别实战
  2. javascript控制validator
  3. Python中的迭代遍历 for in
  4. 前端学习(1758):前端调试值之快速以编辑状态查看一个站点的所有资源
  5. java 泛型类使用,集合中添加不同类型数据
  6. jquery复选框组清空选中的值_jQuery获取复选框被选中数量及判断选择值的方法详解...
  7. 软件测试:第六次作业
  8. Matlab45度边缘连接,为什么Matlab的delaunayn()的delaunay边缘与非相邻的Voronoi区域连接点?...
  9. Linux学习之十一、环境变量的功能
  10. python 串口实例_串口编程(python串口通信实例)
  11. Python编程题汇总(附答案)
  12. java毕业生设计药品管理系统演示录像 2021计算机源码+系统+mysql+调试部署+lw
  13. PDF文件怎么旋转保存
  14. 免费网页设计学习课程,视频以及设计工具大全,网页设计不过如此!!!
  15. 银行业智能运维的探索与实践
  16. Android call requires API level 12 的解决方案
  17. shell小脚本--从laod博客更新hosts文件
  18. linux pam limits.so,linux – 即使需要pam_limits.so,ulimit也不会读取打开文件描述符limits.conf设置...
  19. 随机抽样java_java实现从一个群体中随机抽样一定数量样本
  20. matplotlib设置坐标轴颜色及画布背景色

热门文章

  1. 蜗蜗 Linux内核芬妮下,201402 - 蜗窝科技
  2. svn强制注释 linux,svn强制要求提交注释
  3. php server 连接字符串,sqlServer 数据库常用连接字符串
  4. python训练词库_在Python中训练NGramModel
  5. java 异步读写_Java异步与AIO
  6. mysql视图实现的_mysql视图是什么?怎么实现?
  7. mysql 用户概念_传输概念 – db对象的用户/组/权限从mysql到postgresql
  8. python中闭包不是立刻执行_一道神奇的Python面试题,你会吗?
  9. 如何在注册表里计算机用户名,可以通过注册表修改电脑的密码 ?怎么做的?
  10. c语言——什么时候使用getchar()读取换行符