首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
今晚不熬夜_
广东工业大学 C++
发布于广东
关注
已关注
取消关注
@年轻的靓仔在吐槽:
百度笔试第三题
小红拿到了一棵树,每个节点被染成了红色或者蓝色。小红定义每条边的权值为:删除这条边时,形成的两个子树的同色连通块数量之差的绝对值。小红想知道,所有边的权值之和是多少?输入描述第一行输入一个正整数 n ,代表节点的数量。第二哈输入一个长度为 n 且仅由 R 和 B 两种字符组成的字符串。第 i 个字符为 R 代表 i 号节点被染成红色,为 B 则被染成蓝色。接下来的 n−1 行,每行输入两个正整数 u 和 v ,代表节点 u 和节点 v 有一条边相连。1≤n≤200000int main() { int n; cin >> n; vector<bool> colors_bl(n + 1, false); vector<unordered_set<int>> edges(n + 1, unordered_set<int>()); for (int i = 1; i < n + 1; ++i) { char ch; cin >> ch; if (ch == 'B') { colors_bl[i] = true; } } for (int i = 0; i < n - 1; ++i) { int e1, e2; cin >> e1 >> e2; edges[e1].insert(e2); edges[e2].insert(e1); } vector<bool> is_seen(n+1, false); vector<int> dp(n+1, 0); // dfs返回结果是该节点作为根节点所包含的联通数量 function<int(int, vector<bool>&)> dfs = [&](int i, vector<bool>& is_seen) { int tmp = 0; int sum = 0; vector<int> tmp_v; for (auto&& v : edges[i]) { if (is_seen[v]==false) { tmp++; is_seen[v] = true; int nums = dfs(v, is_seen); sum += nums; tmp_v.push_back(v); } } dp[i] = sum; if (tmp == 0) { dp[i] = 1; return 1; } else { if (tmp == 1) { if (colors_bl[i] != colors_bl[tmp_v[0]]) { dp[i] += 1; } } else { if (colors_bl[i] == colors_bl[tmp_v[0]] && colors_bl[i] == colors_bl[tmp_v[1]]) { dp[i] -= 1; } else if (colors_bl[i] != colors_bl[tmp_v[0]] && colors_bl[i] != colors_bl[tmp_v[1]]) { dp[i] += 1; } } } return dp[i]; }; is_seen[1] = true; auto res = dfs(1, is_seen); // cout << endl; unordered_set<int> ss; int sum = 0; for (int i = 1; i <= n; ++i) { for (auto&& it : edges[i]) { int a1 = min(dp[i], dp[it]); int a2 = abs(res - a1); if (colors_bl[i] == colors_bl[it]) { a2++; } sum += abs(a2 - a1); } } cout << sum/2 << endl;}#include "header.h"int main() { int n; cin >> n; vector<bool> colors_bl(n + 1, false); vector<unordered_set<int>> edges(n + 1, unordered_set<int>()); for (int i = 1; i < n + 1; ++i) { char ch; cin >> ch; if (ch == 'B') { colors_bl[i] = true; } } for (int i = 0; i < n - 1; ++i) { int e1, e2; cin >> e1 >> e2; edges[e1].insert(e2); edges[e2].insert(e1); } vector<bool> is_seen(n+1, false); vector<int> dp(n+1, 0); // dfs返回结果是该节点作为根节点所包含的联通数量 function<int(int, vector<bool>&)> dfs = [&](int i, vector<bool>& is_seen) { int tmp = 0; int sum = 0; vector<int> tmp_v; for (auto&& v : edges[i]) { if (is_seen[v]==false) { tmp++; is_seen[v] = true; int nums = dfs(v, is_seen); sum += nums; tmp_v.push_back(v); } } dp[i] = sum; if (tmp == 0) { dp[i] = 1; return 1; } else { if (tmp == 1) { if (colors_bl[i] != colors_bl[tmp_v[0]]) { dp[i] += 1; } } else { if (colors_bl[i] == colors_bl[tmp_v[0]] && colors_bl[i] == colors_bl[tmp_v[1]]) { dp[i] -= 1; } else if (colors_bl[i] != colors_bl[tmp_v[0]] && colors_bl[i] != colors_bl[tmp_v[1]]) { dp[i] += 1; } } } return dp[i]; }; is_seen[1] = true; auto res = dfs(1, is_seen); // cout << endl; unordered_set<int> ss; int sum = 0; for (int i = 1; i <= n; ++i) { for (auto&& it : edges[i]) { int a1 = min(dp[i], dp[it]); int a2 = abs(res - a1); if (colors_bl[i] == colors_bl[it]) { a2++; } sum += abs(a2 - a1); } } cout << sum/2 << endl;}
点赞 7
评论 3
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
03-11 11:29
游卡_游戏客户端开发(准入职员工)
游卡内推,游卡内推码
游卡服务端开发面经(已oc) 一面1.自我介绍2.虚函数和多态3.vector删除一个元素如何实现的,讲讲移动语义,如何回收一个vector的内存(创建一个空的,移动给现在的(挺巧妙))4.讲讲几种智能指针的应用场景、weak_ptr如何保证在使用期间资源不失效的5.socket编程的流程6.进程、线程、协程7.cpu计算密集型任务用多线程还是多协程,为什么8.死锁是什么,如何解决9.每次生成1个1到1亿的随机数、且不重复10.反问二面+hr面1.自我介绍2.实验室项目拷打,做的东西偏底层,为什么想来做游戏3.bustub,为什么用B+树4.了解innodb的页面组织形式吗5.了解mangod...
点赞
评论
收藏
分享
03-12 23:29
已编辑
华中科技大学 前端工程师
字节 剪映 日常实习前端 一面凉经
一面介绍一下SSR和SSGSSR为什么能够减少渲染时间SSR的缺点介绍一下PrismaPrisma如何解决sql注入问题介绍一下浏览器缓存(协商、强制缓存)项目技术难点后端服务器是怎么维护的如何解决这个难点JS-正则表达式JS-Event Loopasync-await微任务还有哪些?深拷贝实现今年突破最大的三个AI产品用cursor吗?Agent模式?其他的……Vue和React区别React17、18、19之间的区别全栈——SSR一定一定要搞清楚,两次大厂面试都是挂在这里工程题:手写深度拷贝 + Promise输出判定
点赞
评论
收藏
分享
01-26 14:59
广东工业大学 Java
27届想卷java 这个简历大三下能找到实习吗
Edgestr:
没项目地址就干脆把那一栏删了呗
点赞
评论
收藏
分享
02-27 15:02
携程_旅游事业部_Java后端(实习员工)
27找暑期实习,简历求点评
实习不知道怎么写简历,求各位大佬给点建议!~
实习如何「偷」产出?
点赞
评论
收藏
分享
03-11 09:28
西安交通大学 机械结构工程师
救命!求大佬解惑 该找什么方向的工作
感觉自己做的东西太杂了,不知道该找怎样的工作方向了。211本硕 感觉自己最擅长的还是结构方向 但是机械不值钱啊!大佬们感觉简历哪里有问题随便喷!
第一份工作应该选择高薪还...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
快手Java后端一面
4435
2
...
转转二面
4186
3
...
滴滴一面面经
4080
4
...
字节后端日常实习二面
3916
5
...
腾讯前端暑期提前批一、二、三面面经
3869
6
...
6个AI实操技巧,帮你在简历+面试中拉开差距
3488
7
...
腾讯暑期一面
3025
8
...
美团产品笔试何意为....
2555
9
...
阿里云一面
2410
10
...
实习学不到东西的真相
2350
创作者周榜
更多
正在热议
更多
#
你感受到金三银四了嘛?
#
69946次浏览
611人参与
#
美团笔试
#
695299次浏览
4623人参与
#
虽然0面试,但今天___,夸夸自己
#
8623次浏览
172人参与
#
米哈游笔试
#
550850次浏览
1088人参与
#
春招 / 实习投递,你最焦虑的一件事
#
52590次浏览
1024人参与
#
vivo笔试
#
12990次浏览
122人参与
#
27届实习投递记录
#
842次浏览
22人参与
#
AI岗位暴涨12倍,你会转AI赛道吗?
#
4518次浏览
90人参与
#
今天你投了哪些公司?
#
143208次浏览
2590人参与
#
金三银四,你的春招进行到哪个阶段了?
#
18620次浏览
254人参与
#
运营每日一题
#
127420次浏览
900人参与
#
美团秋招笔试
#
194637次浏览
1065人参与
#
小米编程考试
#
31225次浏览
151人参与
#
字节7000实习来了,你投了吗?
#
4297次浏览
20人参与
#
刚工作的你,踩过哪些坑?
#
5971次浏览
136人参与
#
AI项目实战
#
6495次浏览
306人参与
#
小米笔试
#
139024次浏览
994人参与
#
找工作,你都让AI帮你做什么?
#
6666次浏览
213人参与
#
软件开发春招备战日记
#
92997次浏览
611人参与
#
vivo求职进展汇总
#
277798次浏览
1558人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务