首页 > 其他分享 >[USACO08JAN]Cell Phone Network G

[USACO08JAN]Cell Phone Network G

时间:2023-05-20 16:55:12浏览次数:47  
标签:USACO08JAN 覆盖 int son Cell Phone num 节点 dp

题意:

给出由n个点和(n-1)条边构成的树,每个点可以覆盖每个相邻点,求把树上所有点覆盖完成至少需要挑出多少点来做覆盖操作

思路:

先明确用树形dp来做解答,用dp[i][]来表示覆盖对应点和其下方所有节点的最小花费
对于要覆盖的每个点,我们可以有三种选择:
1.自己覆盖自己:这时字节点的选择任意,选其中最小的即可
2.由父亲节点来覆盖自己:这时所有子节点不得选择同样的操作
3.由子节点来覆盖自己:这是相对校麻烦,我们可以先让它所有子节点选择由子节点的子节点来覆盖,再挑出1个或以上的子节点改由自己覆盖自己

代码如下:

#include <bits/stdc++.h>
#include<vector>
using namespace std;
const int N = 1e4 + 5;
int x, y, vist[N], dp[N][3];
vector<int>son[N];
void dfs(int k) {
    vist[k] = 1;
    dp[k][1] = 1;
    int n = son[k].size(), x,y=0;
    //如果是叶子节点
    if (n==1&&k!=1)dp[k][0] = 1;
    int a[N], num = 0;
    for (int i = 0; i < n; i++) {
        int u = son[k][i];
        if (vist[u])continue;
        dfs(u);
        int t = min(dp[u][0], dp[u][1]);
        //自己覆盖自己
        dp[k][1] += min(t,dp[u][2]);
        //借由父节点覆盖自己
        dp[k][2] += t;
        //由子节点覆盖自己
        dp[k][0] += dp[u][0];
        //用数组存储子节点两种选择的差值
        a[num++] = dp[u][1] - dp[u][0];
    }
    if (num == 0)return;
    sort(a, a + num);
    //第一个子节点必须转为自己覆盖自己
    dp[k][0] += a[0];
    //之后的子节点两种选择选较小
    for (int i = 1; i < num && a[i] < 0; i++)dp[k][0] += a[i];
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    for (int i = 1; i < n; i++) {
        cin >> x >> y;
        son[x].push_back(y);
        son[y].push_back(x);
    }
    dfs(1);
    cout << min(dp[1][0], dp[1][1]) << endl;
    return 0;
}

标签:USACO08JAN,覆盖,int,son,Cell,Phone,num,节点,dp
From: https://www.cnblogs.com/markun0/p/17417449.html

相关文章

  • 换新 iPhone 怎么把数据从旧 iPhone 转移过来?
    链接:https://www.zhihu.com/question/314092843/answer/819250980如何使用iPhone迁移数据? ●将新iPhone开机,并将它放在运行iOS12.4或更高版本的当前iPhone旁边。「快速开始」屏幕会出现在当前iPhone上,并且屏幕上会提供使用您的AppleID设置新iPhone的选项......
  • 如何通过三个步骤彻底擦除iPhone中的数据
    https://zh-cn.aiseesoft.com/erase-iphone/how-to-erase-data-on-iphone-securely.html 在出售或赠送用过的iPhone之前,您必须以安全的方式彻底擦除iPhone上的所有数据,以保护您的隐私。您可以简单地从手机上的iPhone中删除数据或恢复计算机上的默认设置。使用方便,但......
  • ipa如何安装到iphone
    ​  SignIn-Apple app管理中心: https://appstoreconnect.apple.com/ appleID管理中心: ManageyourAppleID工具只是提高工作效率,不要想着使用工具来突破apple限制,或者实现apple本身没有的功能。常见的例如没给apple688年费就想着软件上架,想长期有效突破apple......
  • ipa如何安装到iphone
    ​  SignIn-Apple app管理中心: https://appstoreconnect.apple.com/ appleID管理中心: ManageyourAppleID工具只是提高工作效率,不要想着使用工具来突破apple限制,或者实现apple本身没有的功能。常见的例如没给apple688年费就想着软件上架,想长期有效突破apple......
  • ipa文件怎么安装到iPhone手机上?
    ​ ipa文件怎么安装到iPhone手机上?无需越狱帮你把ipa文件安装到苹果手机上E86苹果签名简介:点击可查看很多人都知道apk文件是安卓的app应用程序文件名,但有人知道苹果ios的app应用程序app是什么样的文件名吗? 是ipa文件。 ipa文件由三个部分组成,payload目录下的.app目录,是......
  • ipa文件怎么安装到iPhone手机上?
    ​ ipa文件怎么安装到iPhone手机上?无需越狱帮你把ipa文件安装到苹果手机上E86苹果签名简介:点击可查看很多人都知道apk文件是安卓的app应用程序文件名,但有人知道苹果ios的app应用程序app是什么样的文件名吗? 是ipa文件。 ipa文件由三个部分组成,payload目录下的.app目录,是......
  • 苹果处理器性能排行榜天梯图2023 iphone处理器性能排行2023
    第一名:A161、工艺:相比前代升级到了台积电4nm制程工艺,核心架构是完全相同的。2、核心:23.46Ghz性能核+42.02Ghz能效核,相比于a15只提升了0.23Ghz性能核频率。3、体验:与a15性能相比差距不大,可以理解为a15的超频版本,因此整体使用体验区别也不大。苹果手机爆降1500这活动太给力了机会不......
  • UITableView 系列五 :自定义UITableViewCell (实例)
    有时候我们需要自己定义UITableViewCell的风格,其实就是向行中添加子视图。添加子视图的方法主要有两种:使用代码以及从.xib文件加载。当然后一种方法比较直观。我们这次要自定义一个Cell,使得它像QQ好友列表的一行一样:左边是一张图片,图片的右边是三行标签:当然,我们不会搞得这么复杂,只......
  • getPhysicalNumberOfCells读取excel表格数据,清除空行后代码仍然识别空行,(已解决)
     表格只有几十行数据,但是getPhysicalNumberOfCells读取时还有800多行,原因在于之前把表格数据拓展到了800行,清除数据时,表格的样式为更改,可以尝试使用格式刷复制空行格式刷到错误空行上但是我试了没有用,反而还多了几十行,然后尝试用代码判断空行,只有格式没有数据的空行全部删除,......
  • iphone 解析HTML
    几周前,由于需要从网页中提取一部分内容我们就一直在寻找一个可以在iPhone可用的简单的html解析器。我们在该贴中找到了一个名为hpple的漂亮封装。使用该库的简单步骤如下:包含并链接libxml2:展开Targets双击项目名选择所有配置搜索HeaderSearchPath加入一行并选中recursive选项:${......