树形dp小胖守皇宫(vijosP1144)

题目链接:https://vijos.org/p/1144

题解:这道题的动归稍稍有一点的复杂,因为一个节点有可能被它的子节点观察,也有可能被父节点观察;

所以我们这样表示:

  f[i][0](表示当前i节点放了一个看守,即他自己和所有子节点已经被控制好)

  f[i][1](表示当前i节点不放看守,但是他自己和所有子节点已经被控制好)

  f[i][2](表示当前解点不放看守,子节点已被控制好但他自己没被控制)

  f[i][0]=sum(min(f[son][0],f[son][1],f[son][2]));(如果当前节点放的话,那上一步不管怎么样都可以)

  f[i][1]=sum(min(f[son][0],f[son][1]));(需要子节点已经被控制好,但需要注意,如果每个儿子选的都是f[son][j][1],我们需要挑出代价最小的点,改成f[son][j][0],因为我们需要当前结点被控制);

  f[i][2]=sum(f[son][1]);

大概就是这么几种情况,具体程序注释里讲;

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
LL f[5000][5],cost[5000];
struct ding{int to,next;
}edge[10000];
int head[10000],n,m,root,cnt;
bool vis[5000];
void add(int u,int v){edge[++cnt].to=v; edge[cnt].next=head[u]; head[u]=cnt;}
void dfs(int x)
{bool fg=false;LL minx=2100000000;f[x][0]=cost[x];//先加上在这个点放守卫的代价for (int i=head[x];i;i=edge[i].next){int y=edge[i].to;dfs(y);f[x][0]+=min(min(f[y][1],f[y][2]),f[y][0]);minx=min(minx,f[y][0]-f[y][1]);//为了特判if (f[y][0]>f[y][1]) f[x][1]+=f[y][1];else {f[x][1]+=f[y][0];fg=true;//如果有任何一次取了f[i][0],就说明不需要特判
    }f[x][2]+=f[y][1];}if (!fg) f[x][1]+=minx;
//特殊情况
}
int main()
{int now,x;LL k; scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d%lld%d",&now,&k,&m);cost[now]=k;for (int j=1;j<=m;j++){scanf("%d",&x);add(now,x);vis[x]=true;}}for (int i=1;i<=n;i++) if (!vis[i]) root=i;
//先找到根
 dfs(root);printf("%lld\n",min(f[root][1],f[root][0]));return 0;
} 

 

   

转载于:https://www.cnblogs.com/2014nhc/p/6625427.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务和Java EE

基于微服务的架构如今无处不在。 我们对Netflix和Amazon等当今的创新者如何利用它们在成功产生更多业务方面取得更大的成功了解到很多。 但是&#xff0c;我们所有人都在使用Java EE应用程序服务器并编写经典系统吗&#xff1f; 我们都做错了吗&#xff1f; 我们如何使我们的技…

pcie组raid linux,PCIe 4.0有多强大?组RAID 0阵列之后惊呆了

技嘉在6月16日21:00正式上市了全系列B550系列主板&#xff0c;B550系列主板属于AMD中端系列芯片组&#xff0c;能原生支持PCIe 4.0技术&#xff0c;而这次技嘉B550 AORUS MASTER主板更是不得了&#xff0c;提供了3个支持PCIe 4.0技术的M.2接口&#xff0c;你还可以组RAID 0阵列…

oracle中 trunc(),round(),ceil(),floor的使用

原文&#xff1a; http://www.2cto.com/database/201310/248336.html 1.round函数(四舍五入&#xff09; 描述 : 传回一个数值&#xff0c;该数值是按照指定的小数位元数进行四舍五入运算的结果参数: number : 欲处理之数值 decimal_places : 四舍五入 , 小数取几位 ( 预设为 0…

Java中的指针

Java中是否有指针&#xff1f; 简短的答案是“不&#xff0c;没有”&#xff0c;这对于许多开发人员来说似乎是显而易见的。 但是&#xff0c;为什么对其他人却不那么明显呢&#xff1f; http://stackoverflow.com/questions/1750106/how-can-i-use-pointers-in-java http://…

Android实践 -- 监听应用程序的安装、卸载

监听应用程序的安装、卸载 在AndroidManifest.xml中注册一个静态广播,监听安装的广播android.intent.action.PACKAGE_ADDED 监听程序卸载的广播android.intent.action.PACKAGE_REMOVED ,在广播中一定要加上 <data android:scheme"package" /> 不然就监听不到 &…

符合c语言常量12abc,《C语言》试题abc合2006上.doc

《C语言》试题abc合2006上《c语言》试题(A)一、单项选择题(每小题2分&#xff0c;共20分)以下选项中正确的整型常量是 BA)12. B) -20 C) 1,000 D) 4 5 62.以下选项中不合法的用户标识符是 AA)abc.c B)file C)Main D)PRINT3&#xff0e;可在C 程序中用作用户标识符的标识符是 BA…

redis学习之——redis.conf配置(基本)文件学习

# Redis configuration file example# Note on units: when memory size is needed, it is possible to specify //1 配置大小单位,开头定义了一些基本的度量单位&#xff0c;只支持bytes&#xff0c;不支持bit …

如何把c语言程序的数据导出到文档,急求如何将下列C语言程序数据存储到文件中?...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中。#include int n0;int rest[7][7]; //全局声明,以供全局调用int main(){void perm(int list[],int ,int );int …

weblogic最大线程_处理Weblogic卡住的线程

weblogic最大线程定义或什么是缠线&#xff1f; 如果线程 在设定 的时间 内连续工作&#xff08;非空闲&#xff09;&#xff0c;则WebLogic Server会将其诊断为阻塞 。 您可以通过更改在诊断出线程被阻塞之前的时间长度&#xff08; Stuck Thread Max Time &#xff09;&#…

步进电机的正反向旋转c语言编程,实现步进电机自动正反转程序怎么写

本文收集整理关于实现步进电机自动正反转程序怎么写的相关议题&#xff0c;使用内容导航快速到达。内容导航&#xff1a;Q1&#xff1a;用c语言程序实现步进电机的正反转加减速的编程内容&#xff1a;1、本程序用于测试4相步进电机常规驱动2、需要用跳帽或者杜邦线把信号输出端…

常用容器(Collection)实现类总结(四)——HashSet

HashSet简略说明: 此类实现 Set 接口&#xff0c;由哈希表&#xff08;实际上是一个 HashMap 实例&#xff09;支持。它不保证 set 的迭代顺序&#xff1b;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。 (This class implements the Set interface, backed by a has…

Mockito验证

本文是我们名为“ 用Mockito进行测试 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入了解Mockito的魔力。 您将了解有关“模拟”&#xff0c;“间谍”和“部分模拟”的信息&#xff0c;以及它们相应的Stubbing行为。 您还将看到使用测试双打和对象匹配器进行验证的过…

js页面传值(注意中文)

页面a&#xff08;传送&#xff09;&#xff1a; var myUrlhttp://www.xxx?myParaencodeURI(中文参数);页面b&#xff08;接收&#xff0c;注意中文&#xff09;: //var myPara request("myPara"); function request(paras){// var url location.href;var urldeco…

stax 和jaxb 关系_XML解组基准:JAXB,STAx,Woodstox

stax 和jaxb 关系介绍 上周末&#xff0c;我开始考虑如何以一种资源友好的方式处理大量XML数据。我要解决的主要问题是如何以块的形式处理大型XML文件&#xff0c;同时提供上游/下游系统&#xff0c;需要处理一些数据。 当然&#xff0c;我已经使用JAXB技术已有几年了。 使用J…

C语言switch怎么算,超级新手,用switch写了个计算器程序,求指导

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我也写过一个。。。。看样子大家都喜欢用 switch()来写计算机。。。。百度排版是渣渣&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;# includeintmain(void){ doublea, b, c;//a: 被X数&#xff0c; b: X数&#x…

vim编辑器初级(七)

:syntax on  打开语法高亮 :syntax off  关闭语法高亮 vim有两套语法颜色方案&#xff0c;分别用于背景亮和背景暗时&#xff0c;当vim启动时它会尝试辨别背景并选择合适的颜色方案&#xff0c;但vim辨别背景时可能出错 :set background?  查看background选项的值为多少…

如何编写Java代理

对于vmlens &#xff08;轻量级Java竞争条件捕获器&#xff09;&#xff0c;我们使用Java代理来跟踪字段访问。 这是我们学习的实现此类代理的经验教训。 开始 使用“ static public static void premain&#xff08;String args&#xff0c;Instrumentation inst&#xff09;…

48道C语言上机题参考答案,二级C语言上机题库参考答案(已修改).doc

二级C语言上机题库参考答案(已修改).doc下载提示(请认真阅读)1.请仔细阅读文档&#xff0c;确保文档完整性&#xff0c;对于不预览、不比对内容而直接下载带来的问题本站不予受理。2.下载的文档&#xff0c;不会出现我们的网址水印。3、该文档所得收入(下载内容预览)归上传者、…

Python练习-从小就背不下来的99乘法表

心血来潮,灵机一动,反正就是无聊的做了一个很简单的小玩意: for i in range(1,10):#让i 1-9 循环9次print("\n")#每循环一次进行一次换行for j in range(1,10):#让j 1-9 循环9次print(j, "x",i , "", i * j," ",end"")#输出…

快速排序 数组 函数 c语言,书上快速排序程序中子函数是怎样更改数组的?理论上不可实现啊...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼return不可能返回数组&#xff0c;于是子hanshu1quicksort最后没有用return&#xff0c;但是没有return又怎么可以更改a[N]&#xff1f;主函数中的quicksort(a, 0, N - 1);将a[N]复制后传递给形参a&#xff0c;quicksort(a, 0, N -…