C-Cover the Tree
题意:给你一棵无根树,然后尽可能的用少的链去覆盖全部的边,链可以对一条边进行多次覆盖
思路:首先看到的时候想到对于某一条链肯定出发点是叶子结点,结束点也是叶子结点,因为这样的做法对于单一一条链覆盖的边数一定是最多的。然后之后就是对于为什么你选的这些链能保证覆盖了全部的边,保证没有遗漏,这个是最为关键的。
现在找到一个非叶子结点作为根,然后对其进行dfs得到所有的叶子结点ans,链的个数为(ans+1)/2,这个是显而易见的因为你要覆盖所有的叶子结点,于此同时,我们分别对这些叶子结点按照得到的顺序进行排序,因为dfs的特殊性,即递归到叶子结点才进行返回,因此我们可以这样想,我们得到的叶子结点的顺序是一个以非叶子结点为根,从左到右的叶子结点,那么如何选择才能使得这些有序的叶子结点之间的链覆盖了整个树,
可以不妨这么想,对于一个非叶子结点,他所能覆盖的叶子结点的范围为[l,r],
如果l>ans/2, 会被叶子结点[l-ans/2,l]覆盖
如果r<=ans/2,会被叶子结点[r,r+ans/2]覆盖
如果ans为奇数则最中间的叶子结点选任意一个就行
还有就是对n=1,和n=2进行特判

代码如下

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <cmath>
#include <queue>
#include <set>
#include <map>
#include <stack>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
#define rep(i, a, n) for(int i = a; i < n; i++)
#define per(i, a, n) for(int i = n-1; i >= a; i--)
#define IOS std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
#define INF 1ll<<60
#define fopen freopen("file.in","r",stdin);freopen("file.out","w",stdout);
#define fclose fclose(stdin);fclose(stdout);
const int maxn = 2e5+10;
inline int read(){int x=0,f=1;char ch=getchar();while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}return x*f;
}
std::vector<int> v[maxn];
int pos = 0, pot[maxn];
void dfs(int u, int pre){if(v[u].size()==1) pot[pos++] = u;for(int i = 0; i < v[u].size(); i++){if(pre!=v[u][i]){dfs(v[u][i], u);}}
}
int main(){int n=read();for(int i = 1; i < n; i++){int x=read(), y=read();v[x].push_back(y), v[y].push_back(x);}if(n==1){printf("0\n");return 0;}else if(n==2){printf("1\n");printf("1 2\n");return 0;}int rt = -1;for(int i = 1; i <= n; i++){if(v[i].size()>1){rt = i;break;}}dfs(rt, -1);printf("%d\n", (pos+1)/2);for(int i = 0; i < pos/2; i++){printf("%d %d\n", pot[i], pot[i+pos/2]);}if(pos%2==1) printf("%d %d\n", pot[pos/2], pot[pos-1]);return 0;
}

牛客暑假2020第二场C题,dfs+结论相关推荐

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

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

  2. 【2020年牛客暑假第八场】E题 Enigmatic Partition

    [2020年牛客暑假第八场]E题 Enigmatic Partition 一阶差分+隔项差分 题意 思路 方法一 方法二 Code 反思 题目链接: https://ac.nowcoder.com/a ...

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

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

  4. run (牛客多校第二场)计数DP

    链接:https://www.nowcoder.com/acm/contest/140/A 来源:牛客网 题目描述 White Cloud is exercising in the playgroun ...

  5. 2019 牛客多校第二场 4/10

    题会慢慢补完的,最近在帮别人上课,补题速度很慢,一边看ppt一边刷ppt的题还要补多校的,感觉有点应付不过来,不过以后会慢慢补完的(指整个暑假) A 这场出题人的英文水平真的搞事,不说了((( 这题起 ...

  6. 2021牛客多校第二场 A——Arithmetic Progression

    题目大意 给你一个长度为 nnn 的数列 aaa ,数列中每个元素都不一样,问你存在多少个区间,这些区间内的数排序后是一个等差数列 解题思路 对于一个区间,如果这个区间内的数排序后的元素可以构成一个等 ...

  7. 2019年牛客多校第一场B题 Integration 定积分 裂项相消

    题目链接: https://ac.nowcoder.com/acm/contest/881/B 题解: 转发一个大佬的博客,裂项相消,很容易看懂. https://blog.csdn.net/dill ...

  8. Girlfriend(2021牛客多校第二场F)

    题目描述 输入描述 输出描述 输入样例 1 1 0 0 3 0 0 2 0 0 4 0 0 3 3 输出样例 0.262 数据范围 一个非常有意思(?)的题面,由题意不难看出所求为两人所在次元 (球) ...

  9. 2022牛客多校第二场CDE

    C题 题意:nim游戏,先手赢的话,尽量赢的快,输的话尽量输的慢. 求最多的游戏局数,和先手执行的最优策略数 下面给两个结论: 1,石子数异或和为0的话,先手败,否则胜 2,先手败的话,可以构造出先后 ...

最新文章

  1. CVPR2021|Anchor-free新玩法,一个head统一目标检测,实例分割,姿态估计三种任务...
  2. php roadrunner,使用RoadRunner 加速 Laravel 应用
  3. linux 双网卡绑定(bonding)实现负载均衡或故障转移
  4. android使用桢布局,Android 常用布局
  5. vim的tab键设定
  6. 洗礼灵魂,修炼python(42)--巩固篇—type内置函数与类的千丝万缕关系
  7. centos5 vnc安装配置
  8. 不懂什么是锁?看看这篇你就明白了
  9. python 图标题上移_请问如何在这个Python中将标题一起爬下来啊
  10. html中制作m3u8播放列表,播放具有HTML视频标签的m3u8文件
  11. PCB板元器件视觉检测系统解决方案
  12. iOS监听模式系列之本地通知Notification
  13. 创造与魔法241服务器系统什么时候修好,《创造与魔法》萌新小课堂——如何选择服务器...
  14. 经验 | 本硕985回忆研究生这三年
  15. 计算机老师的作文,电脑,我的好老师作文
  16. qt修改程序图标名称_【Qt开发】更改应用程序图标和任务栏图标
  17. 《Adobe Illustrator CS6中文版经典教程(彩色版)》—第0课0.15节使用“外观”面板与效果...
  18. Matlab 画图连线、箭号表示
  19. Python实现阳历转农历功能
  20. 2015中国数据库技术大会十大看点抢先看

热门文章

  1. 苹果6s系统升级无服务器,iPhone6s升级至iOS13,如果没换新电池,最好别更新
  2. 验证身份证信息(python)
  3. STemWin专题--图形化窗口的简单制作
  4. 大数据中的用户画像——让机器懂用户
  5. 利用计算机制作多媒体最后一步,在复习课中应用信息技术提高教学效益
  6. winform的RichTextBox使用
  7. RichTextBox超链接解析
  8. 乒乓普及套及廉价底板评测
  9. 动态磁盘无法访问后数据恢复
  10. C#_CF玩瞬时给你一个点--cross