【掩体计划——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;
}
相关推荐
weixin_30777913几秒前
智能模拟数据生成平台:生成式AI合成数据技术重塑开发测试效能
人工智能·测试工具·算法·测试用例
羊羊小栈1 小时前
Uplift营销供应链协同决策系统(基于Uplift因果推断与运筹优化算法)
前端·人工智能·算法·毕业设计·大作业
金融小师妹1 小时前
AI因子共振模型显示:金银比突破区间上沿,白银定价逻辑进入再校准阶段
人工智能·算法·均值算法·线性回归
J2虾虾2 小时前
C语言 typedef 用法
c语言·数据结构·算法
hunterkkk(c++)2 小时前
线段树例题
算法
故渊at2 小时前
第二板块:Android 四大组件标准化学理 | 第七篇:Activity 页面载体与任务栈算法
android·算法·生命周期·activity·任务栈
兰令水2 小时前
leecodecode【区间DP+树形DP】【2026.6.10打卡-java版本】
java·算法·leetcode
weixin199701080162 小时前
[特殊字符] 1688开放平台API Sign签名算法详解(Java / Python / PHP 实现)
java·python·算法
未若君雅裁3 小时前
JVM 垃圾回收算法与分代回收机制
java·jvm·算法