题解 | 在树上游玩

在树上游玩

https://www.nowcoder.com/practice/8c0d60834a924ce98e7425fed9c62ab8

#include <cstdint>
#include <iostream>
#include <vector>
using namespace std;

int main() {
    constexpr int MOD = 1e9 + 7;

    // construct
    int n, k; cin >> n >> k;
    vector<vector<int>> tree(n);
    vector<bool> marked(n);

    for (int i = 0; i != k; ++i) {
        int index; cin >> index; --index;
        marked[index] = true;
    }

    for (int i = 0; i != n - 1; ++i) {
        int u, v; cin >> u >> v; --u; --v;
        tree[u].push_back(v);
        tree[v].push_back(u);
    }

    // dfs
    vector<bool> visited(n);
    auto dfs = [&](auto&& dfs, int node, int parent) -> int {
        visited[node] = true;
        int count = 0;
        for (int neighbor : tree[node]) {
            if (!marked[neighbor]) {
                ++count;
            } else if (neighbor != parent) {
                count += dfs(dfs, neighbor, node);
            }
        }
        return count;
    };

    int count = 0;
    uintmax_t ways = 1;
    for (int i = 0; i < marked.size(); ++i) {
        if (marked[i] && !visited[i]) {
            ++count;
            ways = (ways * dfs(dfs, i, -1)) % MOD;
        }
    }

    cout << count << ' ' << ways;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

程序员牛肉:你这简历有啥值得拷打的?在牛客你这种简历一抓一大把,也就是个人信息不一样而已。 关键要去找亮点,亮点啊,整个简历都跟流水线生产出来的一样。
点赞 评论 收藏
分享
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
12-19 20:28
已编辑
门头沟学院 Java
美团履约 全栈工程师 (n+1)*15.5 其他
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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