战略游戏

题目描述

鲍勃喜欢玩电脑游戏,特别是战略游戏,但有时他找不到解决问题的方法,这让他很伤心。
现在他有以下问题。
他必须保护一座中世纪城市,这条城市的道路构成了一棵树。
每个节点上的士兵可以观察到所有和这个点相连的边。
他必须在节点上放置最少数量的士兵,以便他们可以观察到所有的边。
你能帮助他吗?
例如,下面的树:
image
只需要放置 1 名士兵(在节点 1处),就可观察到所有的边。

输入格式

输入包含多组测试数据,每组测试数据用以描述一棵树。
对于每组测试数据,第一行包含整数 N,表示树的节点数目。
接下来 N行,每行按如下方法描述一个节点。
节点编号:(子节点数目) 子节点 子节点 …
节点编号从 0到 N−1,每个节点的子节点数量均不超过 10,每个边在输入数据中只出现一次。

输出格式

对于每组测试数据,输出一个占据一行的结果,表示最少需要的士兵数。

数据范围

0<N≤1500,
一个测试点所有 N相加之和不超过300650。

输入样例

4
0:(1) 1
1:(2) 2 3
2:(0)
3:(0)
5
3:(3) 1 4 2
1:(1) 0
2:(0)
0:(0)
4:(0)

输出样例

1
2

题目分析

image

代码实现

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define int long long
const int N=1505;
int h[N],e[2*N],ne[2*N],idx;
//dp[i][0]表示以i为根节点的树,且当前位置不放士兵的满足条件的最小士兵数
//dp[i][1]表示以i为根节点的树,且当前位置放置士兵的满足条件的最小士兵数
int dp[N][2],vis[N];
void add(int x,int y){
	e[idx]=y,ne[idx]=h[x],h[x]=idx++;
}
void dfs(int u){
    //如果当前位置放置哨兵,则数量为1,否则为0
	dp[u][1]=1,dp[u][0]=0;
	for(int i=h[u];~i;i=ne[i]){
		int j=e[i];
		dfs(j);
		//如果父节点放置了哨兵,则子节点可放可不放,取最小即可
		dp[u][1]+=min(dp[j][1],dp[j][0]);
		//如果父节点没有放置士兵,则子节点必须放置士兵
		dp[u][0]+=dp[j][1];
	}
}
signed main(){
	int n;
	while(cin>>n){
	    //由于有多组测试样例,故每次都需要进行初始化
		int root=-1;
		memset(h,-1,sizeof h);
		memset(vis,0,sizeof vis);
		idx=0;
		for(int i=0;i<n;i++){
			int x,k;
			scanf("%lld:(%lld)",&x,&k);
			while(k--){
				int y;
				cin>>y;
				//建立有向边
				add(x,y);
				//标记以便查找根节点
				vis[y]=1;
			}
		}
		//如果有结点未被标记,则说明其是根节点
		for(int i=0;i<n;i++)if(!vis[i])root=i;
		dfs(root);
		//输出
		cout<<min(dp[root][0],dp[root][1])<<endl;
	}
	return 0;
}
本文转载于网络 如有侵权请联系删除

相关文章

  • 微搭低代码「外部数据源」接入实测

    数据源是腾讯云微搭低代码的重要能力。数据源本质上是一系列操作数据的方法集合,通过对数据源模型的设计、对页面组件的数据绑定,可快速实现各类应用中数据的存储、使用,此外微搭低代码还提供了提供了数据源管理功能,可以创建、管理多个数据源。 近期,微搭低代码正式支持了“外部数据源”,现在,除了在平台中自建数据源,开发者还可以将第三方已有的HTTP接口集成到低代码平台,提供可视化界面录入HTTP接口,也可以通过编写云函数方式更灵活地接入第三方HTTP接口,有效提升项目开发效率。下面就手把手带大家使用微搭低代码平台的外部数据源:登录微搭低代码的控制台,在数据源管理菜单中点击 新建数据源 ,并在下拉选项中选择【外部数据源】:我们输入数据源名称和数据源标识,点击 确定 按钮:1、定义方法通过设置方法,可以设置数据源的使用方式,可设置多种方法以配合不同场景使用。系统默认配置了新增、删除、更新等方法,可满足多数场景。如有自定义的方法需求,可通过云函数或本地函数的方法进行编写。在此案例中,以新增一个自定义方法为例:打开刚刚新建的外部数据源界面,点击编辑按钮进入数据源的编辑页面。在编辑页面点击新增自定义方法增加

  • 如何处理SAP gateway service使用过程中遇到的400 error - invalid key predicate type for guid

    CreatedbyJerryWang,lastmodifiedonNov20,2014 使用transactioncode/IWFND/ERROR_LOG: 通过点ActiveSource查看抛errormessage的断点位置,重新在gatewayclient里执行request,断点触发: 这里得知key应为guid: 类型检查不通过,因此会报errormessage: 在SE16里找到OpportunityID=21对应的guid之后, 之前类型不匹配的问题消失:

  • 为什么只有 Pornhub 这么红?

    每次当黑白橙三色组成的封面图出现在你眼中,还没等看清楚标题写的什么内容,你的手就会控制不住地点开它,就像这篇文章一样。这就是Pornhub那掩饰不住的魅力,既然每次提到它大家都很嗨,那今天我们就大大方方地好好聊聊Pornhub(以下简称P站)。可能直到如今,依然还有人不知道或者从未听说P站,那就先来认识一下它。没错,P站是全球最大的色情影片分享网站之一,2007年,成立于加拿大蒙特利尔,被视为是「色情2.0」的先驱,截至2020年6月,P站已经是全球第10大访问量网站。可能你注意到上文的一个词:「之一」,没错,可能你以为P站就是全球最大的成人视频网站,然而并不是,根据SimilarWeb2020年8月的最新数据显示:在P站之上,还有Xvideos高居全球成人网站榜首。事实上,长期以来,Xvideos一直都是全球成人网站的扛把子,访问量始终稳如老狗。我们再来看谷歌趋势的数据,Xvideos的搜索热度也稳压P站一头。只不过在今年2月份之后,P站才实现逆袭。具体是什么原因,咱们后边会说到。所以你看,在全球范围内,P站并不是成人网站的南波湾,可奇怪的是,在我们国内,P站却收获了远超其体量的声势

  • 设计模式--外观模式

    代码说明:packagecom.java.jikexueyuan.facademode.hometheater; //爆米花 publicclassPopcorn{ //单例模式,构造函数私有化 privatestaticPopcorninstance=null; privatePopcorn(){ } //单例模式创建实例 publicstaticPopcorngetInstance(){ if(instance==null){ instance=newPopcorn(); } returninstance; } publicvoidon(){ System.out.println("PopcornOn"); } publicvoidoff(){ System.out.println("PopcornOff"); } publicvoidpop(){ System.out.println("Popcornispopping"); } }复制packagecom.java.jikexueyuan.facad

  • Jenkins+GitLab+Docker+SpringCloud+Kubernetes实现可持续自动化微服务

      现有混合云平台的场景下,即有线下和线上的环境,又有测试与正式的场景,而且结合了Docker,导致打包内容有所区分,且服务的发布流程复杂起来,手工打包需要在编译阶段就要根据环境到处更改配置,因此纯手工发布增加了实施的难度,需要一个统一的适应各种环境部署的方案。基于微服务的发布流程  手动/自动构建->Jenkins调度K8SAPI->动态生成JenkinsSlavepod->Slavepod拉取Git代码/编译/打包镜像->推送到镜像仓库Harbor->Slave工作完成,Pod自动销毁->部署到测试或生产Kubernetes(K8S)平台。  上面是理想状况下的将服务编译打包成镜像上传到镜像库后部署到Kubernetes平台的一个流程,但问题是:我们有线上线下平台,代码在线下GitLab,是出不了外网的,因此线上K8S集群无法拉取代码编译。Jenkins的master所在服务器是CentOS6.5,没有Docker环境,也没有在K8S集群服务器内,因此无法直接执行dockerbuild镜像和kubectlapply发布服务到K8S集群。Jenkins的slave节点都是无法访

  • FPGA上电后IO默认状态

    问题来源:fpga配置时的管脚状态关于这个问题,好像网络上面有很多人问,但是eetop这个话题不多。大多数的回答是:配置的时候所有的管脚默认是Z态。这个说法到底对不对呢? 下面我谈谈自己使用的几款新品的情况。项目背景:开关信号发射机。初始状态要求IO信号都是低电平,来自控制DSP的发射控制信号触发IO开关信号的产生。上电的时候不能有高电平,否则引起发射机状态不稳,会产生问题。 (1)VirtexII1000设作IO的信号在上电配置的过程中用示波器测量时高电平,大约在90ms左右,和配置时间基本一致。在管脚配置栏设置pull-down后,这个现象消失。未使用管脚没有这个现象。未使用管脚的处理是float。 (2)virtex5-xc5vsx50t设作IO的信号在上电配置的过程中发现有和配置时间基本一致的一段大约在0.2V左右的凸起。基本可以认为是没有信号。管脚配置没有做特殊设置。 (3)EP3C25的fpga,在配置的时候,能够发现编程应用的IO脚和未使用的管脚都有大约300ms左右的(EPCS16)高电平。和配置时间完全一致。使用外接的下拉电阻6k左右下拉到1V左右,使用1k下拉到0.

  • vue用template还是JSX?

    各自特点template模板语法(HTML的扩展)数据绑定使用Mustache语法(双大括号)<span>{{title}}<span>复制JSXJavaScript的语法扩展数据绑定使用单引号<span>{title}<span>复制vue官方建议Vue官方建议使用template模板,但是:“更抽象一点来看,我们可以把组件区分为两类:一类是偏视图表现的(presentational),一类则是偏逻辑的(logical)。我们推荐在前者中使用模板,在后者中使用JSX或渲染函数。这两类组件的比例会根据应用类型的不同有所变化,但整体来说我们发现表现类的组件远远多于逻辑类组件。” 也就是说,在一些特定场景下可以建议使用JSX语法。JSX语法如何在vue中使用先看下template的情况<!--nav-tmpl.vue--> <template> <h1v-if="level===1"> <slot></slot> </h1> <h2v-else-

  • MyCat教程【安装及配置介绍】

    版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。本文链接:https://dpb-bobokaoya-sm.blog.csdn.net/article/details/102579932本文我们来介绍下MyCat的安装和相关的配置文件的介绍一、安装MyCat1.安装准备环境1.1安装JDK  因为mycat是java开发的,所以需要java虚拟机环境,在Linux节点中安装JDK是必须的。 1.2放开相关端口  在主从节点上都放开对端口3306的访问,或者直接关闭防火墙。#临时关闭 serviceiptablesstop serviceiptablesstart #永久关闭 chkconfigiptableson chkconfigiptablesoff #查看防火墙状态 serviceiptablesstatus复制1.3root账号  mycat是我们的数据库中间件,那么mycat必然要能够访问对应的主从数据库,所以在主从数据库中我们需要分别创建访问的账号。grantallprivilegeson*.*to'root&#x

  • 监听DIV等标记的class属性改变,实现onshow,onhide

    貌似h5标记有click等事件的监听,没有show,hide等事件的监听。用了一个tab样式库,想实现切换tab时刷新页面数据,这个库也没说明招接口也不好找。看到他是在div的class属性上面addClass("activeshow"),removeClass("activeshow"),来实现切换时的隐藏和显示的。于是就想有没有监听class改变的方法,百度到MutationObserver 用示例代码测试了一下,果真可以。<script> $(document).ready(function(){ vartargetNode=document.getElementById('article-original-review').parentNode; varconfig={attributes:true}; varcallback=function(mutationsList){ for(varmutationofmutationsList){ if(mutation.type=='attribute

  • 【转】架构漫谈(七):不要空设架构师这个职位,给他实权

    原文链接 架构漫谈是由资深架构师王概凯Kevin执笔的系列专栏,专栏将会以Kevin的架构经验为基础,逐步讨论什么是架构、怎样做好架构、软件架构如何落地、如何写好程序等问题。本文是漫谈架构专栏的第七篇,作者Kevin探讨了什么是架构师、成为架构师的前提条件、如何发现“是谁的问题”、架构师的权利和义务等话题。正如作者所说,架构师必须是一个组织的领导人,有权利调动这个组织的架构,才能够更好的发挥架构师的作用,更好的把利益的调整落到实处。什么是架构师在之前的几篇文章中,经常会提到架构师这个词。我们已经定义了什么叫架构,那怎么定义架构师呢,是不是做架构的就叫架构师了?没有这么简单,本篇尝试讨论一下这个问题。架构师的前提条件如果一个人在工作中,只是致力于完成自己的工作,以做好自己的工作为主要目标,那么最多只能成为一个工匠,无法成为一个架构师。因为这个过程解决的还是自己的问题,并没有时间的压力,可以随意什么时候做完都可以。当我们所做的工作是处于社会的分工的一环,需要帮助别人解决问题,并且按时解决别人的问题成为我们自己的问题的时候,我们就有了时间压力,潜意识里会自然而然的有一种对时间的恐惧。这个恐惧

  • 开发 | 小米再开源!这次是移动端神经网络框架基准测试项目 MobileAIBench

    继小米在6月宣布自研的移动端深度学习框架MobileAIComputeEngine(MACE:https://github.com/xiaomi/mace)开源以来,小米近日又宣布开源移动端神经网络框架基准测试项目MobileAIBench(https://github.com/xiaomi/mobile-ai-bench)。据AI科技评论了解,MobileAIBench旨在给开发这提供一个系统性的对比,为软硬件的选择提供一个直观定量的指导,其目的是建立一个统一的软硬件综合评测框架,能够对不同的硬件、计算单元、ABI以及神经网络计算框架进行全方位的评测。眼下大多数开发者面临着同样一个困境,即如何选择满足应用计算需求同时具有高性价比的硬件,以及如何选取硬件适合的神经网络计算框架。除此之外,开发者还需要权衡模型量化压缩以及模型的精度损失,对于应用或者算法开发者而言,如何做出合适的选择,往往需要进行多方位的尝试,耗时耗力。在用户对智能性、低延迟和隐私保护的诉求变得越来越高的当下,移动设备上的离线神经网络应用变得越来越普遍。而MobileAIBench或许能解决这个问题。这次开源的Mobile

  • HDU-5572-An Easy Physics Problem

    ACM模版描述题解计算几何问题,给定一质点的位置和速度,给定一个圆柱的圆心和半径,质点移动如果撞上圆柱则发生弹性碰撞。问这个点是否可以经过另一个质点。这个题比较直观的想法是求角度,但是这样容易存在精度上的误差,所以可以采用求一个点关于直线的对称点来求出弹性碰撞后的轨迹,判断另一个质点是否在这个质点的运动轨迹上即可。代码#include<cstdio> #include<iostream> #include<algorithm> #include<cmath> usingnamespacestd; constdoubleEPS=1e-8; intcmp(doublex) { if(fabs(x)<EPS) { return0; } else { returnx>0?1:-1; } } typedefstructnode { doublex,y; voidread() { scanf("%lf%lf",&x,&y); } }point,speed; pointPA,PB; speed

  • 为什么托管调试与本机调试不同?

    人们会问“为什么本机调试器不能调试托管代码?”.原因是CLR提供了许多在典型的本地C++应用程序中所获得的酷服务,例如:运行在虚拟机/JITEN、动态类布局、类型系统、垃圾收集、反射等等。每一个都对调试器提出了特殊的挑战。换句话说,一个完成了所有这些功能的本地应用程序根本无法与传统的本地调试器进行调试。 1)本机调试可以在硬件级别抽象,但是托管调试需要在IL级别抽象。托管代码不能仅仅被压缩成C/C++本地调试范例。一个原因是这可能会限制CLR执行IL的选项。例如,尽管目前(从v2.0起)jit-IL,我们还是希望为诸如解释IL、推销很少使用的jitted代码、甚至重新jitting代码等事情敞开大门。如果ICorDebug对所有内容都使用本机代码偏移量,它将无法调试解释的IL。2)托管调试需要很多信息,直到运行时才可用。对于托管代码,编译器只生成IL,真正的调试信息直到运行时才得到解析。例如,JIT将在运行时将IL编译为本机代码,加载程序将在运行时动态确定大多数类的布局。类型系统可以在运行时创建新类型.对于本机代码,这都是在编译时确定的。托管调试器需要某种方法在运行时获取所有这些信息。

  • gitlab hostname修改

    cd/var/opt/gitlab/gitlab-rails/etc vimgitlab.yml   /home/git/gitlab/config/gitlab.yml production:&base gitlab: host:git.domain.com复制

  • iOS加载大量图片出现内存警告而crash掉

        ///绘图显示 -(UIImage*)OriginImage:(UIImage*)imagescaleToSize:(CGSize)size { UIGraphicsBeginImageContext(size);//size为CGSize类型,即你所需要的图片尺寸 [imagedrawInRect:CGRectMake(0,0,size.width,size.height)]; UIImage*scaledImage=UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); returnscaledImage;//返回的就是已经改变的图片 }复制   参考: https://blog.csdn.net/u012198553/article/details/43051005 https://www.cnblogs.com/xm5mao/p/3964701.html

  • HDU 1166-敌兵布阵

    HDU1166-敌兵布阵 题意: 给一个数组,有查询、增加、减少三种操作对于每次询问输出从i到j所有元素的和 思路:树状数组裸题 特别的对于减少操作只需向x位置更新-y即可 #include<iostream> #include<cstdio> #include<queue> #include<string> #include<map> #include<vector> #include<set> #include<algorithm> #include<vector> #include<utility> #defineINF0x3f3f3f3f #definemod1000000007 #definefifirst #definesesecond #definepbpush_back #definempmake_pair #defineIOSios::sync_with_stdio(false);cin.tie(0);cout.tie(0) #defineen

  • 隐藏nginx 版本号信息

    为了安全,想将http请求响应头里的nginx版本号信息隐藏掉: 1.nginx配置文件里增加 server_tokensoff; server_tokens作用域是httpserverlocation语句块 server_tokens默认值是on,表示显示版本信息,设置server_tokens值是off,就可以在所有地方隐藏nginx的版本信息。   2. 如果php配置文件里设置了fastcgi_paramSERVER_SOFTWARE,则找到这一行修改一下: 编辑php-fpm配置文件,如fastcgi.conf或fcgi.conf(这个配置文件名也可以自定义的,根据具体文件名修改): 找到:fastcgi_paramSERVER_SOFTWAREnginx/$nginx_version;改为:fastcgi_paramSERVER_SOFTWAREnginx; 3.重启nginx重新加载配置文件,结束   另外,支持一下小站  http://www.yiqidache.com  旅行户外装备专业

  • 服务端验证的问题处理

    在使用服务端验证的时候,因为各种需求的不同,可以用作一下的几个处理。   1、使用sql语句的验证   就是在写sql语句的时候,进行用户名和密码的匹配查询。如:wherename=?andpassword=?。在客户端请求时,在servlet层获取用户名和密码参数。并调用该方法,如果返回有值,则验证通过。反之,不通过。   通过这种方法。在客户端提示页面错误信息的时候,可能体验感不是太好。因为不能准确的提示用户,是用户名输入错误,还是密码输入错误。 //获取请求的用户名和参数 Stringname=req.getParameter("name"); Stringpassword=req.getParameter("password"); //方法类 UserDaouserDao=newUserDao(); //通过sql验证 List<User>user=userDao.findUser(name,password); //判断 if(user.size()>0){//验证通过 //通过:跳转页面 }else{//验证不通过 //提示:用户名或密码

  • Web应用部署

    一,WAR文件   建立WAR文件时,就是把整个Web应用结构(去掉Web应用上下文,也就是把WEB-INF之上的一级目录去掉)压缩起来,给定一个.war扩展名,WAR文件名就会成为WEB应用的名字。   当通过把WAR文件放在webapps目录中,在Tomcat中部署Web应用时,Tomcat会解开WAR文件,创建上下文目录。   如果服务器得到的客户请求需要WEB-INF或META-INF下的文件,容器肯定会响应一个404NOTFOUND错误。   二,在部署文件中配置servlet初始化参数 <servlet> <servlet-name>KathyOne</servlet> <servlet-class>foo.DeployTestOne</servlet> <load-on-startup>1</load-on-startup> </servlet>复制 只要是大于0,就表示“在部署时或服务器启动时初始化这个servlet,而不要等到第一个请求到来才初始化”。 &nb

  • 【心情】经过鏖战,终于写出了人生第一个spj

    #include"testlib.h" #include<string> usingnamespacestd; intmain(intargc,char*argv[]){ registerTestlibCmd(argc,argv); stringopt=ouf.readString(); stringans_opt=ans.readString(); intlen=opt.length(),top=0,lastpos; intflag_and=0,flag_mod=0; stringstr[3]; for(inti=0;i<len;++i){ if(opt[i]=='&')flag_and++; if(opt[i]=='%')flag_mod++; } if(flag_and==1&&flag_mod==1){ flag_and=0;flag_mod=0; for(inti=0;i<len;++i){ if(opt[i]=='%'&&!flag_and){ quitf(

  • mysql5.7.22-log 修改远程访问

    正常的设置账号远程访问依然访问不了的情况,可以看一下服务器my.cnf配置文件下 [client] #password=your_password 把上面的#去掉就行了。 Domore,learnmore,sogetmore

相关推荐

推荐阅读