寻找牛妹

最优题解

容易发现这是一棵树,1为根。那么走到牛妹所在的x的最大花费相当于x的子树中的通道都不走,x到根节点的通道只走一次,其他通道全走两次。用sz[x]表示x子树中通道数量,dep[x]表示根到x的通道数量,那么对于特定的x,答案就是2n-2-2sz[x]-dep[x]
时间复杂度和空间复杂度都是

vector<int> g[200055];
int sz[200055], dep[200055];
void dfs(int u, int f){
    sz[u] = 0; dep[u] = dep[f] + 1;
    for(int v: g[u]) if(v!=f) dfs(v, u), sz[u] += sz[v]+1;
    return;
}
vector<int> solve(int n, int m, vector<int> &u, vector<int>&v, vector<int> &x){
    for(int i = 0; i <= n; ++i)
        g[i].clear(), dep[i] = sz[i] = 0;
    assert(u.size() == n-1 && v.size() == n-1 && x.size() == m );
    for(int i = 0; i < n-1; ++i){
        g[u[i]].push_back(v[i]);
        g[v[i]].push_back(u[i]);
    }
    dep[0] = -1;
    dfs(1, 0);
    vector<int>ans;ans.clear();
    for(int i = 0; i < m; ++i){
        ans.push_back(2*n-2-2*sz[x[i]]-dep[x[i]]);
    }return ans;
}
全部评论

相关推荐

07-02 18:09
门头沟学院 Java
苍穹外卖和谷粒商城这俩是不是烂大街了,还能做吗?
想去重庆的鸽子在吐槽:你不如把这俩做完自己搞明白再优化点再来问 何必贩卖焦虑
点赞 评论 收藏
分享
ohs的小木屋:比不少实习待遇高了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
见见123:简历没有啥问题,是这个社会有问题。因为你刚毕业,没有工作经历,现在企业都不要没有工作经历的。社会病了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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