HDU ACM 1054 Strategic Game 二分图最小顶点覆盖?树形DP「建议收藏」

HDU ACM 1054 Strategic Game 二分图最小顶点覆盖?树形DP

大家好,又见面了,我是全栈君。

分析:这里使用树形DP做。

1、最小顶点覆盖做法:最小顶点覆盖 == 最大匹配(双向图)/2。

2、树形DP:
dp[i][0]表示i为根节点,而且该节点不放,所需的最少的点数。
dp[i][1]表示i为根节点,而且该节点放,所须要的最少的点数。

dp[i][0]=sum(dp[son[i][j]][1]) 该点不放。则它的儿子节点必须都放,仅仅有这样之间的边才干够被覆盖。
dp[i][1]=sum(min(dp[son[i][j]][0],dp[son[i][j]][1])) 该点放的话,则它的儿子节点有两种决策。放或不放,取min就可以。

#include<iostream>
#include<vector>
#include<limits.h>
using namespace std;

#define N 1505
int dp[N][2];    //dp[i]表示以i为根节点时所须要的最小点数
int f[N];        //用来记录父节点
vector<int> son[N]; //记录儿子节点

int min(int x,int y)
{
	return x<y?

x:y;}int dfs(int pos,int v){ int sum,i; if(dp[pos][v]!=INT_MIN) return dp[pos][v]; sum=v; for(i=0;i<son[pos].size();i++) if(v==1) //当前节点选 sum+=min(dfs(son[pos][i],0),dfs(son[pos][i],1)); else sum+=dfs(son[pos][i],1);//当前节点不选,子节点必选 dp[pos][v]=sum; return sum;}int main(){ int ans,n,i,x,m,j,t; while(scanf("%d",&n)==1) { for(i=0;i<n;i++) { son[i].clear(); f[i]=i; dp[i][0]=dp[i][1]=INT_MIN; } for(i=0;i<n;i++) { scanf("%d:(%d)",&x,&m); for(j=0;j<m;j++) { scanf("%d",&t); son[x].push_back(t); f[t]=x; } } for(i=0;i<n;i++) if(f[i]==i) //找到根节点 { ans=min(dfs(i,0),dfs(i,1)); break; } printf("%d\n",ans); } return 0;}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116417.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CentOS7开启端口(永久)

    CentOS7开启端口(永久)redis等服务启动后,外网默认是无法访问的,因为防火墙不允许,所以要开启防火墙,让其可以访问这些端口号。方法一:使用firewall1、运行命令:firewall-cmd–get-active-zones运行完成之后,可以看到zone名称,如下:2、执行如下命令命令:firewall-cmd–zone=public–add-port=6379/tcp–per…

    2022年6月23日
    49
  • vim命令多行操作

    vim命令多行操作一、文件内多行注释:1.按esc进入命令行模式下,按下Ctrl+v,进入列(也叫区块)模式;2.在命令模式下h键或j键选择需要注释的多行;3.按下(大写)“i”键,进入插入模式;4.输入注释符#或//5.最后按下“Esc”键。注:在按下esc键后,即可出现二、文件内删除多行注释:1.首先按esc进入命令行模式下,按下Ctrl+v,进入列模式…

    2022年6月26日
    103
  • Android 三重缓存

    Android 三重缓存文章目录内存缓存Bitmap内存复用在Android应用中不可避免地要显示很多图片,如果不做处理,不管图片是否显示过,每次启动时都需要从网络拉取,这就极大影响了图片加载速度和浪费用户流量,并且整个应用中的图片内存无法控制在一个总的范围内。因此,图片缓存在一个图片加载模块中很重要并且不可缺少。目前比较流行的图片框架,如Glide、Fresco等,都使用了“内存-本地-网络”三级缓存策略。首…

    2022年5月21日
    46
  • 扫雷小游戏-纯网页版下载_扫雷游戏下载手机版

    扫雷小游戏-纯网页版下载_扫雷游戏下载手机版这两天在恶补前端的相关知识,看到JQuery的动画部分时,突然心血来潮想做一个扫雷的网页版,于是花了差不多一天的时间完成了一个初始版本,权当对这几天学习成果的一个回顾,若某处功能有更好实现方式欢迎留言

    2022年8月2日
    7
  • Mac OS 如何卸载干净Pycharm

    Mac OS 如何卸载干净Pycharm由于Pycharm新版本的某些原因想更换低版本的朋友,可以按照以下步骤清除干净pycharm残留数据(本人卸载过程记录,如有错误请指正):1、打开访达,找到PyCharm应用,右键移到废纸篓;2、清理缓存,参数,日志相关配置文件:(注意:使用lsPyCharm关键字进行搜索,PyCharm2020.1是我的文件名称)a、cd~/Library/Preferences/rm-rfPyCharm2020.1/…

    2022年8月27日
    9
  • C / C++ 读取文件出现乱码解决方法 | 输出到文件出现乱码

    C / C++ 读取文件出现乱码解决方法 | 输出到文件出现乱码  昨天用C语言写了一下文件读取,发现读出来的全是乱码。这肯定是文字编码不同导致的。    据我查证,C语言的汉字编码方式是由你电脑决定的,所以需要看一下你电脑是什么编码,来确定你需要把文本文件改成什么编码。1.win+R,打开运行框之后输入cmd打开,然后在cmd最上边右键→属性,点开就可以查看当前编码方式,我的电脑是GBK。2.然后修改对应的文本文件编码方式。…

    2022年7月26日
    60

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号