【掩体计划——DFS+缩点】

题目

代码

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
vector<vector<int>> g;
bool st[N];
int ans = 1e9;
bool dfs(int f, int u, int dis)
{
    bool is = 1;
    for (auto j : g[u])
    {
        if (j == f)
            continue;
        is &= dfs(u, j, dis + (g[u].size() > 2));
    }

    if (g[u].size() == 1) // 无向图叶子节点判定
        is = st[u];
    if (is)
        ans = min(ans, dis);
    return is;
}
int main()
{
    int n;
    cin >> n;

    g.resize(n + 1);
    for (int i = 1; i < n; i++)
    {
        int a, b;
        cin >> a >> b;
        g[a].push_back(b);
        g[b].push_back(a);
    }

    g[1].push_back(-1); // 为了统一那个多出来的父节点
    int m;
    cin >> m;
    for (int i = 1; i <= m; i++)
    {
        int x;
        cin >> x;
        st[x] = 1;
    }

    dfs(-1, 1, 0);

    cout << ans;
    return 0;
}
相关推荐
信竞星球_少儿编程题库10 分钟前
2026年全国信息素养大赛算法应用主题赛 丝路新城 Python 模拟卷(三)
开发语言·python·算法
云泽80818 分钟前
笔试算法 - 滑动窗口篇(二):从异位词到最小覆盖子串的通用框架
c++·算法
qq_2965532722 分钟前
[特殊字符] 搜索插入位置:从O(n)到O(log n)的优雅进化
数据结构·算法·面试·分类·柔性数组
凯瑟琳.奥古斯特27 分钟前
力扣3654:二维矩阵连续空位统计
数据结构·数据库·算法·职场和发展
basketball61637 分钟前
并查集基础算法总结 C++ 实现
开发语言·c++·算法
故事和你911 小时前
洛谷-【图论2-2】最短路3
开发语言·数据结构·c++·算法·动态规划·图论
yong99901 小时前
基于VC++的图像匹配金字塔算法
c++·算法·计算机视觉
Rhi6371 小时前
第 4 篇:用JWT与角色权限构筑安全的API防线
算法
fengfuyao9851 小时前
基于MATLAB的ALOHA防碰撞、二进制搜索算法和帧时隙算法
人工智能·算法·matlab