题解 | 在树上游玩

在树上游玩

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")

全部评论

相关推荐

07-14 12:22
门头沟学院 Java
点赞 评论 收藏
分享
人力小鱼姐:实习经历没有什么含金量,咖啡店员迎宾这种就别写了,其他两段包装一下 想找人力相关的话,总结一下个人优势,结合校园经历里有相关性的部分,加一段自我评价
点赞 评论 收藏
分享
牛客83700679...:简历抄别人的,然后再投,有反馈就是简历不行,没反馈就是学历不行,多投多改只要技术不差机会总会有的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-16 18:03
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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