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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 全012路规律_双元素集合怎么判断

    全012路规律_双元素集合怎么判断堆题目链接将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:x is the root:x是根结点;x and y are siblings:x和y是兄弟结点;x is the parent of y:x是y的父结点;x is a child of y:x是y的一个子结点。输入格式:每组测试第1行包含2个正整数N(≤ 1000)和M(≤ 20),分别是插入元素的个数、以及需要判断的命题数。下一行给出区间[−10000,10000]内的N个要被

    2022年8月8日
    5
  • Gecko浏览器_ie内核浏览器有哪些

    Gecko浏览器_ie内核浏览器有哪些GeckoFX是一个运用C#写的windows窗体控件(具体在WPF项目中怎么用winForm的控件可以参考博客园的许多博文或者说我将来有时间会写一个wpf的控件,不过现在时间来不及,好像对wpf控

    2022年8月3日
    9
  • FM/FFM

    FM/FFMFM背景及相关算法对比(1)FM(factorizationmachine)是在LR(logisticregression)基础上,加入了特征的二阶组合项;(2)SVM和FM的主要区别在于,SVM的二元特征交叉参数是独立的,如wijw_{ij}wij​,而FM的二元特征交叉参数是两个k维的向量vi、vjv_i、v_jvi​、vj​,即&lt;vi,vj&gt;&lt…

    2022年5月2日
    51
  • 分子生物学数据库综合目录「建议收藏」

    分子生物学数据库综合目录「建议收藏」SRS序列查询系统http://www.embl-heidelberg.de/srs5/分子生物学数据库及服务器概览http://www.ai.sri.com/people/pkarp/mimbd/rsmith.htmlBioMedNet图书馆http://biomednet.comDBGET数据库链接http://www.genome.ad.jp/dbg

    2022年7月11日
    16
  • python虚拟环境安装和配置[通俗易懂]

    python虚拟环境安装和配置[通俗易懂]http://blog.csdn.net/pipisorry/article/details/47008981AnacondaConda是Continuum公司发布的Anaconda里边配备的一个包管理器。Conda让你更加方便地安装和管理各种扩展包和运行环境,同时支持Windows,MacOSX以及Linux。安装下载Python3版本[https://w…

    2022年10月19日
    6
  • linux文件夹权限777怎么设置,Linux:设置文件夹权限之777的含义[通俗易懂]

    linux文件夹权限777怎么设置,Linux:设置文件夹权限之777的含义[通俗易懂]今天面试的时候一不小心就给自己挖坑了,说使用过的Linux命令时,我说了一个mkdir-m777文件夹名称——创建文件夹及授予权限,然后就被问:为什么mkdir-m777文件夹名称授予文件夹权限要用777?在linux系统中,文件或目录的权限可以分为3种:R:4可读W:2可写X:1执行-:对应数值0数字4、2和1表示读、写、执行权限rwx=4+2+1…

    2022年10月21日
    5

发表回复

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

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