【HDU 1054】Strategic Game【树形DP】

爬取信用中国里面的行政处罚 result字段名为行政处罚文书号、处罚决定日期、处罚内容、处罚金额、违法事实、处罚机关、公司名称,行政处罚次数。file_path=r'E:\Data analyze\python\行政处罚爬虫/'#路径需要按实际修改。writer = pd.ExcelWriter('统计.xlsx')# 写入Excel文件。src_workbook=file_path+r'行政处罚(名单).xls' #表格名称也要更改。# keyword = input("输入爬取的公司全称必须是全称") 阅读详情

题目大意:

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054
给出一棵树,树的每一条边左右两个点至少得有一个点被选择。求选择的最小数量。


思路:

很明显的树形DP。和没有上司的舞会很像。
对于每一个点,如果选择它,那么它的子节点就可以选择,也可以不选择,那么选择它的最优答案就是它的子节点选择或不选择的最优答案之和。
那么如果不选择这个点,那么它的所有子节点都必须选择,所以答案就是它的所有子节点被选择的最优答案之和。
设 f [ x ] [ 1 ] f[x][1] f[x][1]为选择点 x x x的最优答案, f [ x ] [ 0 ] f[x][0] f[x][0]为不选择点 x x x的最优答案,那么就有( y y y为 x x x的子节点):
f [ x ] [ 1 ] = ∑ i = 1 m [ x ] m i n ( f [ y [ i ] ] [ 1 ] , f [ y [ i ] ] [ 0 ] ) f[x][1]=\sum^{m[x]}_{i=1}min(f[y[i]][1],f[y[i]][0]) f[x][1]=i=1∑m[x]​min(f[y[i]][1],f[y[i]][0])
f [ x ] [ 0 ] = ∑ i = 1 m [ x ] f [ y [ i ] ] [ 1 ] f[x][0]=\sum^{m[x]}_{i=1}f[y[i]][1] f[x][0]=i=1∑m[x]​f[y[i]][1]


代码:

#include <cstdio>
#include <iostream>
#include <cstring>
#define N 20010
using namespace std;

int n,m,x,y,k,root,f[N][2],head[N],out[N];
char c;
bool Root[N];

struct edge
{
    int to,next;
}e[N];

void add(int from,int to)
{
    k++;
    e[k].to=to;
    e[k].next=head[from];
    head[from]=k;
}

void dp(int x,int fa)
{
	int ans1=0,ans2=0;
	if (!out[x]) return;
    for (int i=head[x];~i;i=e[i].next)  //找这个点的所有子节点
    {
        int v=e[i].to;
        if (v==fa) continue;
        dp(v,x);
        ans1+=min(f[v][1],f[v][0]);
        ans2+=f[v][1];
    }
    f[x][1]=ans1+1;
    f[x][0]=ans2;
}

int main()
{
    while (cin>>n)
    {
        memset(Root,0,sizeof(Root));
        memset(f,0x3f3f3f3f,sizeof(f));
        memset(out,0,sizeof(out));
        memset(head,-1,sizeof(head));
        memset(e,0,sizeof(e));
        k=0;
        for (int i=1;i<=n;i++)
        {
            cin>>x>>c>>c>>m>>c;  //这道题拥有者神奇的读入
            x++;
            for (int j=1;j<=m;j++)
            {
                scanf("%d",&y);
                y++;
                add(x,y);
                add(y,x);
                Root[y]=true;  //点y不可能是根节点
                out[x]++;  //x的出度
            }
        }
        for (int i=1;i<=n;i++)
        {
            if (!Root[i]) root=i;  //是根节点
            if (!out[i])   //是叶子节点
            {
                f[i][1]=1;
                f[i][0]=0;
            }
        } 
        dp(root,-233);
        printf("%d\n",min(f[root][0],f[root][1]));
    }
    return 0;
}
YOLO数据集实现数据增强的方法(裁剪、平移 、旋转、改变亮度、加噪声等) 数据集样本太少怎么办?数据集优质图像不够怎么办?如何做到更好的数据预处理?一文带你学会数据增强,还可实现带标签的扩充。 阅读详情

相关推荐

【STM32Cube HAL】输入捕获(六)——脉宽测量

1

HAHAHA 4906

洛谷2016 战略游戏(树形DP)

传送门 【题目分析】 之前觉得这种入门DP很难来着qwq 由于n很小,加上可以记忆化,所以直接暴力搜索,枚举父亲是否放了,如果没放那么当前点只能选择放,否则两种都可以,这样dfs下去统计答案即可。 【代码~】 #include&lt;bits/stdc++.h&gt; using namespace std; const int MAXN=2e3+10; const int MAXM=...

Michael_GLF的博客 573

基于Android13的系统启动流程分析(三)之FirstStageMain阶段

init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等。init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init1. Bootloader 引导当按下设备电源键时,最先运行的就是 bootloader(固化在ROM的程序),bootloader 的主要作用就是硬件设备(如 CPU、flash、内存)的初始化并加载到RAM,通过建立内存空间映射,为装载 Linux 内核做好准备,。

q1210249579的博客 5496

HDU 1054 Strategic Game(简单树形DP)

题目太简单,懒得写解释了,直接存一份代码#include #include #include using namespace std; const int maxn=1505,inf=1<<30; int dp[maxn][2]; int n,m; vectorG[maxn]; void dfs(int u,int fa) { dp[u][1]=1; dp[u][0]=0;

哇哈哈的专栏 416

Ubuntu 22.04远程桌面终极指南:从零配置RDP到解决黑屏问题

本文提供了一份Ubuntu 22.04远程桌面配置的终极指南,详细讲解了如何从零开始安装和配置RDP服务,并重点解决了连接后常见的黑屏问题。通过分析会话冲突、修复启动脚本及配置权限策略,帮助用户实现稳定、高效的远程桌面连接,优化分辨率、禁用锁屏,打造无缝的远程工作体验。

sony5的博客 1381

生物信息学工具链搭建:用conda一键搞定MCScanX所有依赖(Ubuntu20.04实测)

本文详细介绍了在Ubuntu20.04系统上使用conda一键部署MCScanX及其所有依赖的高效方法,解决了传统源码编译安装中的依赖冲突问题。通过conda环境管理工具,研究者可以快速搭建生物信息学工具链,实现基因组共线性分析的高效运行,显著提升研究效率。

backprop5master的博客 245

Strategic Game HDU - 1054 (树形dp)

题意:求一棵树上的最小点覆盖 思路:可以二分图来做,但是据说很慢, dp思路:和 Anniversary party HDU - 1520 的做法很像,因为每个节点只有放于不放两种操作,dp[i][0]表示不放,dp[i][1]表示放, 状态转移:dp[i][0]+=dp[son][1],dp[i][1]+=min(dp[son][1],dp[son][0]) 代码: #pragma ...

untilyouydc 261

qt实现程序密钥注册功能,MD5加密+AES加密,并实现一台电脑系统一个密钥

qt实现了一个给自己软件加密的功能。 原理是: 需要被注册的软件第一次运行的时候,在系统的注册表里面注册一个键值,如下: 这个值作为生成密钥的用户识别号,然后生成密钥文件key.db,把这个key.db文件放到软件执行目录下,即可完成软件的注册并正常使用软件。 软件第一次打开的界面及密钥生成工具软件界面如下: 将密钥生成工具软件生成的key.db放到软件执行目录下之后,软件即可正常使用,如下图: 代码使用了MD5加密 外加 AES加密, 解密和加密的核心代码如下: QSt.

weixin_43935474的博客 4127

P2016 战略游戏-树上DP之最小点集覆盖

题目链接战略游戏 - 洛谷 题目背景 Bob 喜欢玩电脑游戏,特别是战略游戏。但是他经常无法找到快速玩过游戏的办法。现在他有个问题。 题目描述 他要建立一个古城堡,城堡中的路形成一棵无根树。他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能了望到所有的路。 注意,某个士兵在一个结点上时,与该结点相连的所有边将都可以被了望到。 请你编一程序,给定一树,帮 Bob 计算出他需要放置最少的士兵。 输入格式 第一行一个整数nn,表示树中结点的数目。 第二行至第n+1n+1行,每行描述每个...

jisuanji2606414的博客 3519

手把手教你用AI工具快速开发UniApp首页:从设计稿到完整页面的实战流程

本文详细介绍了如何利用Claude Code、Cursor等AI工具高效开发UniApp首页的完整工作流。从设计稿解析、Prompt工程、代码生成优化到调试适配,提供了一套可复用的实战流程,帮助前端开发者大幅提升从设计到代码的转化效率。

weixin_29199873的博客 317

海思SD3403/SS928V100开发(6)单路GMSL-MIPI-YUV相机视频输入调试

硬件连接:森云GMSL相机 -> GMSL 解串器 -> SD3403 MIPI0暂时先进行单路视频输入通路调试。

jzwjzw19900922的博客 1930

洛谷P2016战略游戏 题解

题目链接 分析: 树形DP 令fu,0f_{u,0}fu,0​表示点uuu不放士兵时uuu的子树(包括uuu)最少需要多少个士兵,fu,1f_{u,1}fu,1​表示点uuu放士兵时uuu的子树最少需要多少个士兵。 因为需要每条边的端点都有人,所以若点uuu不放,则uuu的每一个儿子都要放,否则uuu与儿子的连边的两端将都没有士兵,不符合题意。令sonuson_usonu​表示uuu的儿子的集合,...

一只蒟蒻的博客 385

【PINN高级教程】 第1讲:函数空间与逼近理论

结论:在解决偏微分方程(PDE)时,解往往属于某个 Sobolev 空间 HsHs,其正则性受限于 PDE 的系数与边界条件;而 PINN 在训练过程中实际上是在逼近 Barron 空间中的函数。由于 Barron 空间允许高频信息的压缩,PINN 可以在参数规模较小的情况下捕捉到 PDE 解所需的细节,但其正则性保证仍然比 Sobolev 更弱。因此,在设计 PINN 时,需要通过正则化或网络结构(如残差连接、归一化层)来“逼近”Sobolev 正则性。

u012133341的博客 236

HDU 1054 Strategic Game (树形DP)

Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8641 Accepted Submission(s): 4161 Problem Description Bob enjoys playing computer games, especially strategic games, but sometim

Ever_glow的博客 921

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

HDU-1054 Strategic Game(树形DP)

HDU-1054 Strategic Game(树形DP)

Dacc123的博客 848

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

HDU 1054 Strategic Game (树形dp)

Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 10312    Accepted Submission(s): 4825   Problem Description Bob enjoys play...

YIU 298

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

HDU 1054 Strategic Game 树形DP

HDU 1054 Strategic Gam 树形DP 学校CSP模拟考试的题目,在这道题的基础上稍微进行了一点修改,即有一个结点是指挥部,必须有士兵把守,见下面问题描述。HDU这道题稍加修改即可,代码当中做了注释。 【问题描述】 现有一城市,假设所有的道路可形成一个具有n个节点的树。为了守卫这个城市,需要有士兵看守所有的道路。如果在一个节点上放置一个士兵,那么和这个节点相连的所有道路都能被看守住。在这n个节点中,指挥部在其中一个节点上,必须有士兵看守。请你设计一个部署方案,为了看守住所有道路,最少需要部署

weixin_46283740的博客 454

HDU 1054 Strategic Game 树形DP

Problem: 给了一棵树,所有的边都需要士兵看守,士兵在节点上,结点上的士兵可以看守与他相邻的路,问这棵树最少需要多少士兵。

YueLing's Blog 502

hdu1054 Strategic Game(树形dp)

Strategic GameTime Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8820    Accepted Submission(s): 4238Problem DescriptionBob enjoys playing comput

gyr 243

hdu1054 Strategic Game 树形DP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 思路:树形DP,用二分匹配也能解决 定义dp[root][1],表示以root 为根结点的子树且在root放一个士兵的最优值,那么因为在root已经有士兵了,所以对其孩子来说可以放也可以不放 那么dp[root][1]+=min(dp[son][1],dp[son][0]); dp[ro...

weixin_30698297的博客 166

hdu 1054 Strategic Game 树形dp基础&&模板

第一次独立的写出来树形dp,但是是看着模板写的,发现树形dp只要找到父亲节点与儿子节点的关系,问题就好办了 之前初始化dp[u][1]=1 转移方程 dp[u][1]+=min(dp[v][0],dp[v][1]);  dp[u][0]+=dp[v][1]; void dfs(int u) { int i, j, k; vis[u]=1; 操作:u节点dp初始

代码随想录 1639

HDU 1054 Strategic Game (树形DP)

题目点我点我点我 题目大意:在一棵树上的结点放置士兵,士兵可以本结点及相邻结点,问最少放置士兵数。 解题思路:树形DP dp[i][0] 为以 i 为根节点,并且该点不放,所需要的最少的人数; dp[i][1] 为以 i 为根节点,并且该点放,所需要的最少的人数。 那么状态转移方程为: dp[i][0]=sum(dp[son[i][j]]

blanKey的博客 335

HDU 1054 Strategic Game 树形DP/二分图匹配

第一次写博文,想了半天就拿一道dp/graph的题作为处女作吧 此题有两种常见解法 (题意比较简单,就不赘述) 1.二分图最大匹配         此题等价于问一棵树中最小点覆盖数。树形结构可以把它看做是一个二分图,一个点集为奇数层,另一个点集为偶数层,显然满足二分图定义,可以套用求二分图最小点覆 盖的方法。或者,补全二分图,根据对称性,就是前面构造的二分图的边数的二倍,故最后结果也要除

1292765944的专栏 813

hdu 1054 Strategic Game 树形dp

#include #include #include #include using namespace std; const int N =1505; vectorg[N]; bool flag[N]; int dp[N][2]; void dfs(int root){ if(g[root].size()==0){ dp[root][0]=0; dp[root][1]=1; ret

DieOrThink 546

HDU1054 Strategic Game 树形DP

这种类型的题目,每个节点有两个不同的状态,分别是存在和不存在士兵,分别求出不同状态的最小消耗就可以了。 1:以当前节点为根节点,在该节点排士兵守护道路的最小消耗。在这种情况下,他的子节点可以安排士兵,也可以不安排士兵。可以从各个子节点两个不同状态(存在士兵,不存在士兵)的最值中选出最小的消耗,然后相加就求出了当前节点派士兵的最小消耗。 2:以当前节点为根节点,不存在士兵。这种情况十分清楚,因为

924

HDU1054 && POJ1463:Strategic game(树形DP)

Description Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the solution fast enough and then he is very sad. Now he has the following problem. He must def

ACM!荣耀之路! 3150
上一篇: 【洛谷P2846】光开关【线段树】
下一篇: 【JZOJ 3487】剑与魔法【贪心】【堆】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值