F.孤独(牛客小白月赛39)

题意:

给定一棵树,寻找一个路径,将断掉所有与这个路径上的点相连的边,使得剩下的最大连通块的大小最小

题解:

这题有点印象,感觉做过,至少这个方法肯定遇到过
设dp[u]表示以u为根的子树里,删除以u为起点的路径后最大连通块的大小最小是多少
我们贪心的去进行转移,它一定是选择最大儿子去走路径去删除,因为只有这样才会影响到最大连通块(最大儿子意味着最大连通块)

所以转移方程为:dp[u]=max(sz[v2],dp[v1]),最大连通块要么是以v1为根删除得到的最大连通块,要么就是子树v2

但是这个dp[i]并不是答案
因为路径并不是只从u开始,有可能路径的两端都在一个子树里

此时,路径一定是以u为根的子树里,,因为有两个方向的路径,因此一定走最大儿子和次大儿子。此时连通块有这几部分:以v1为根的子树里删除后剩下的连通块,以v2为根的子树里删除后剩下的连通块,第三大叶子节点v3,还有就是除了以u为根的子树,之外所有点组成一个连通块,这四部分取max,答案我们取min
此时答案就是:ans=min(ans,max(n-sz[u],dp[v1],dp[v2],sz[v3]))

代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn=3e6;
vector<int> v[maxn];
int n;
int dp[maxn];
int sz[maxn];
int res= 1e9;
void dfs(int u, int fa)
{sz[u]= 1;dp[u]= 1;int maxv= 0;int maxv2= 0;int maxv3= 0;int id= 0; //大儿子int id2= 0; //次大儿子for (auto j : v[u]) {if (j == fa)continue;dfs(j, u);sz[u]+= sz[j];if (sz[j] > maxv) {maxv3= maxv2;maxv2= maxv;maxv= sz[j];id2= id;id= j;}else if (sz[j] > maxv2) {id2= j;maxv3= maxv2;maxv2= sz[j];}else if (sz[j] > maxv3) {maxv3= sz[j];}}int ans= 0;dp[u]= max(maxv2, dp[id]);res= min(res, max({n - sz[u], maxv3, dp[id], dp[id2]}));
}
int main()
{cin >> n;for (int i= 0; i < n - 1; i++) {int a, b;scanf("%d%d", &a, &b);v[a].push_back(b);v[b].push_back(a);}dfs(1, 0);cout << res << endl;return 0;
}

F.孤独(牛客小白月赛39)相关推荐

  1. 2021牛客小白月赛39

    2021牛客小白月赛39(A+B+C+E+G+H) A.憧憬 B.欢欣 C.奋发 D.绝望 E.迷惘 F.孤独 G.冷静 H.终别 A.憧憬 题目链接:https://ac.nowcoder.com/ ...

  2. 牛客小白月赛61 F.选座椅(双指针)

    牛客小白月赛61 F.选座椅(双指针) 显然 ( l , r ) (l,r) (l,r)满足 ( l , r + 1 ) (l,r+1) (l,r+1)满足. 那么可以考虑双指针,枚举 l l l,然 ...

  3. 牛客小白月赛2 F.黑黑白白

    牛客小白月赛2 F.黑黑白白 题目链接 题目描述 艮为山,动静得宜,适可而止:兑为泽,刚内柔外,上下相和. 艮卦:兼山,艮:君子以思不出其位.财帛常打心头走,可惜眼前难到手,不如意时且忍耐,逢着闲事休 ...

  4. 牛客小白月赛60(A~C)题解

    原题地址:牛客小白月赛60_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ 题目A:小竹与妈妈 题意:输出(x-b)/a即可,没什么好说 代码: #include< ...

  5. 牛客小白月赛3 C.博弈

    牛客小白月赛3 C.博弈 题目链接 题目描述 XHRlyb 在和 Cwbc 玩游戏. 在一个多重集合中有在 [l,r] 中的全部整数各一个,即 l,l+1,l+2,......,rl,l+1,l+2, ...

  6. F-选座椅_牛客小白月赛61 (nowcoder.com) 双指针,差分,2021济南ICPC- K Search For Mafuyu (pintia.cn) dfs

    F-选座椅_牛客小白月赛61 (nowcoder.com) 双指针,差分 如果区间[l,r]满足所有条件,那么包含[l,r]的区间也一定是满足条件的,那就考虑双指针遍历每一个区间,如果当前区间满足条件 ...

  7. 牛客小白月赛1 I.あなたの蛙が帰っています

    牛客小白月赛1 I.あなたの蛙が帰っています 题目链接 题目描述 あなたの蛙が帰っています! 蛙蛙完成了一趟旅行,回家啦!但它还是没有去它心中非常想去的几个地方.总共有 N 个它 想去的目的地.蛙蛙下 ...

  8. 牛客小白月赛73F Kevin的哈希构造

    原题链接:F-Kevin的哈希构造_牛客小白月赛73 (nowcoder.com)​​​​​ dp[i][j][k] : 前i位,相同字符个数为j,哈希值为k,表示的状态为0.1,0表示不可行,1表示 ...

  9. 牛客小白月赛19 题解

    牛客小白月赛19 A. 「水」滔天巨浪(思维) B. 「木」迷雾森林 (数字三角形模型) C. 「土」秘法地震(二维前缀和) F. 「水」悠悠碧波 (字符串) D. 「金」初心如金 (找规律) G. ...

最新文章

  1. rabbitmq怎样确认是否已经消费了消息_【朝夕专刊】RabbitMQ生产者/消费者消息确认...
  2. Netflix实用API设计 1:Protobuf FieldMask实践
  3. 拆解交易系统--性能优化,安全加固与弹性扩缩容
  4. 好记心不如烂笔头之jQuery学习,第一章
  5. AJAX的表单请求POST请求方式
  6. volatile的适用场景
  7. 信息学奥赛一本通C++语言——1112:最大值和最小值的差
  8. 机器人驾驶的神经网络愿景(上)
  9. 南京江南贡院值得去吗_江南贡院,去南京的必游之地!
  10. android 设置听筒模式切换,Android开发【06-29视频贴】切换听筒模式部分手机失效,怎么解决?...
  11. KMP算法详解P3375 【模板】KMP字符串匹配题解
  12. 排列组合算法之二: 01转换法_java改变后的c++改进版
  13. mipi和isp处理_汽车摄像头的图像信号处理ISP NVP2650
  14. java开发html如何转换为word,Java怎么将html转换成word
  15. Linux相对路径和绝对路径
  16. 深度剖析5种最常见的指数估值算法
  17. HP台式机清灰后无法启动的解决办法
  18. you-get下载优酷视频报错:用户账户异常、请重新登录
  19. 程序员的忧桑:有人向你反馈了一个Bug!
  20. 泰克示波器知识分享-波的类型

热门文章

  1. 每日一笑 | 为什么英语老师让我们养成背单词的习惯?
  2. 网页设计的css样式,网页设计引入CSS样式的五种方式_css
  3. html表格在页面间距,在CSS中设置单元格和单元格间距?
  4. config.php开启redis,微擎如何开启redis,redis开启方法详解
  5. php 实现类,php 获取页面中指定内容的实现类
  6. linux连接教程视频,[原创]linux视频教程之连接
  7. localhost 已拒绝连接_MySQL连接错误:Access denied for #x27;root#x27;@#x27;localhost#x27;
  8. java读取文件跳过_在Java中读取文本文件-为什么跳过行?
  9. 织梦手机版list.php,解决织梦一级目录作域名list.php无法跳转到手机站的问题
  10. 数据结构——二叉树的双序遍历