首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 08:36
腾讯_后端研发
“什么大厂,还不是进车间” —— 该怎么和家里人解释呢?
前段时间在网上看到一个很有意思的帖子,让我这个小镇做题家,读完之后有种身临其境的感觉。帖子是这样说的:当时看完这段内容,心里想着,这不就是我吗?临近毕业,妈妈总是问我:“工作找好了吗?”“找好了,在北京一家大厂上班。”“是考的吗?”“差不多吧。”妈妈沉默了一会儿,又追问:“那工资怎么样?不会被骗吧?”“还行,勉强能养活自己,倒不会被骗。”我妈妈也是这样认为的,她的世界里,根本没有什么 “大厂” 的概念,也不知道现在满大街的毕业生找不到工作,更不知道她儿子拿下了这几个大厂的 Offer 是多么不容易。还有,亲戚们知道我在北京上班了,都挺好奇我在北京的工资是多少,有没有 “达到他们的预期”。每当谈...
清爽面经党:
其实,我觉得没必要和家里人解释太多,他们只要知道我们过得好就行,等我们稳定了,他们自然会放心的
牛客解忧铺
点赞
评论
收藏
分享
08-13 19:31
门头沟学院 Java
实习的内耗时刻!没成果产出?一边实习一边秋招?
大家好,我是程序员小白条,今天来介绍一下大多数人的实习是怎么样的?没产出?正常!一边实习一边秋招?顶不住压力?正常!实习离职,全力秋招?正常!all in 实习转正?然后失败?正常!解决“实习没成果”的困境去中小厂的同学,我建议是自己去寻找一个难点,然后结合自己公司的业务,比如做家具的,那么就结合到家具的服务上去。一边实习一边秋招?如果你这个实习整天带薪摸鱼,而且公司不管你刷题和看八股文的行为,那么可以参考以下内容。算法只需要力扣题单!!!大一大二可以考虑竞赛和周赛,其他不需要考虑,走性价比最高的学习路线!如果公司有转正答辩,优先转正答辩,结束后再走秋招流程!有个保底先!!尽量多认识相关圈子的...
投递58到家等公司8个岗位
点赞
评论
收藏
分享
07-31 13:33
上海大学 机械设计/制造
佬们能帮我看看简历吗
梭哈秋招了
点赞
评论
收藏
分享
昨天 15:09
海康威视_技术支持部_云存储开发工程师(准入职员工)
美的内推,美的内推码
历时25天拿下美的offer,主要还是ai面试前后等待时间长,自从一面开始效率特别快! | 3.22投递 | 3.27AI面 | 4.9一面 | 4.11一面通过通知二面 | 4.14二面 | 4.16上午二面通过通知恳谈会 | 4.16下午恳谈会后oc ————————————————— 一面: 1.自我介绍 ①专业背景(专业能力)②实习经历(营销能力)③学生组织经历(领导能力) 2.深挖简历(实习经历主要做了什么,取得成果?) ①个人职责②工作流程③工作成果 3.深挖简历(大学经历总结了哪些心得和收获?且是在别的项目中不可得到的?) 感觉问题有点混乱就迅速整理思路针对性讲述我的B端营销的实...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
给26届小伙伴们一些建议
1.2W
2
...
半夜12点都叫提前下班了?
6793
3
...
大家辛辛苦苦秋招 结果你作弊拿到了字节算法sp
6409
4
...
字节三面-会赢吗
5958
5
...
面试不要紧张,人生的容错率高的可怕
5782
6
...
如何提高秋招面试成功率?
5541
7
...
秋招第一个offer 附tl
4500
8
...
26前端校招 腾讯wxg 3面 面经
4325
9
...
8.14 腾讯TEG-云架构平台部-后台开发一面凉经
4133
10
...
个人对八股的认识
3822
创作者周榜
更多
正在热议
更多
#
你怎么看待AI面试
#
7461次浏览
91人参与
#
我的省钱小妙招
#
22714次浏览
371人参与
#
实习需要主动找活干吗?
#
7999次浏览
87人参与
#
移动求职进展汇总
#
5852次浏览
50人参与
#
转正答辩报告怎么写
#
4222次浏览
44人参与
#
你觉得技术面多长时间合理?
#
104819次浏览
750人参与
#
业务面应该做哪些准备
#
3362次浏览
93人参与
#
大厂面试问八股多还是项目多?
#
5457次浏览
92人参与
#
小米硬件提前批进度交流
#
175215次浏览
1542人参与
#
面试太紧张了怎么办?
#
8319次浏览
181人参与
#
你有没有为省钱「拼过命」
#
3450次浏览
68人参与
#
你是如何祛除班味的
#
2979次浏览
51人参与
#
机械专业只有考研才有出路吗
#
124334次浏览
890人参与
#
你被mentor骂过吗?
#
14633次浏览
89人参与
#
机械人,你最希望上岸的公司是?
#
175601次浏览
1874人参与
#
我想去国央企的原因
#
63015次浏览
397人参与
#
kpi面有什么特征
#
64757次浏览
437人参与
#
小米提前批笔试难吗
#
37273次浏览
366人参与
#
饿了么求职进展汇总
#
67597次浏览
657人参与
#
秋招投递记录
#
36621次浏览
403人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务