8月30日携程笔试

1 游游的重组偶数 
2 游游的you 
3 游游的三色树 
4 游游的平滑序列
大佬都 a 了几道呀?三色树咋做呀?
#秋招##提前批##内推##投票#
全部评论
#include <bits> using namespace std; struct Node { int r, g, b; Node() { r = g = b = 0; } }; unordered_map<long long="">mp; string s; vector<vector><int>>G; Node a; Node dfs(int start, int except_) { long long mps = (long long)start * 100000 + except_; if(mp.count(mps)) return mp[mps]; Node ans; if(s[start] == 'r') ans.r++; else if(s[start] == 'g')ans.g++; else ans.b++; for(auto &i : G[start]) { if(i == except_) continue; auto res = dfs(i, start); ans.r += res.r; ans.g += res.g; ans.b += res.b; } mp[mps] = ans; auto temp = ans; temp.r = a.r - ans.r; temp.g = a.g - ans.g; temp.b = a.b - ans.b; mp[(long long)except_ * 100000 + start] = temp; return ans; } int main() { int n; cin >> n; cin >> s; G = vector<vector><int>>(n); for(int i = 0, u, v; i < n - 1; i++) { cin >> u >> v; G[u - 1].push_back(v - 1); G[v - 1].push_back(u - 1); } for(int i = 0; i < n; i++) { if(s[i] == 'r') a.r++; else if(s[i] == 'g') a.g++; else a.b++; } int ans = 0; unordered_map<long long="">vis; for(int i = 0; i < n; i++) { for(auto &j : G[i]) { if(vis.count((long long)i * 100000 + j)) continue; auto res = dfs(j, i); if(res.r > 0 && res.g > 0 && res.b > 0) { res.r = a.r - res.r; res.g = a.g - res.g; res.b = a.b - res.b; if(res.r > 0 && res.g > 0 && res.b > 0) ans++; } vis[(long long)i * 100000 + j] = vis[(long long)j * 100000 + i] = true; } } cout << ans << endl; return 0; }</long></int></vector></int></vector></long></bits>
1 回复 分享
发布于 2022-08-30 21:11 北京
3色树找个连接数为1的作为根递归就行 返回值就是自身+往下搜的颜色数 拿到返回值和总颜色数减下看可不可以断开
1 回复 分享
发布于 2022-08-30 21:05 上海
哥们a了多少
1 回复 分享
发布于 2022-08-30 21:03 四川
牛啊大佬,你有没有投过荣耀。这几天第一批秋招马上要截止了,我可以内推。荣耀honor招聘官网https://www.hihonor.com/cn/career/ 内推码:yuhvad
点赞 回复 分享
发布于 2022-08-30 21:28 广东
三色树dfs只过了25,真不知道哪里错了
点赞 回复 分享
发布于 2022-08-30 21:22 重庆
第二题用js为什么通过率一直是0···明明测试用例是对的,真是要被这个输入输出搞吐血
点赞 回复 分享
发布于 2022-08-30 21:09 广东

相关推荐

评论
1
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务