分析:这里使用树形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;
}

HDU ACM 1054 Strategic Game 二分图最小顶点覆盖?树形DP的更多相关文章

  1. HDU - 1054 Strategic Game(二分图最小点覆盖/树形dp)

    d.一颗树,选最少的点覆盖所有边 s. 1.可以转成二分图的最小点覆盖来做.不过转换后要把匹配数除以2,这个待细看. 2.也可以用树形dp c.匈牙利算法(邻接表,用vector实现): /* 用ST ...

  2. HDU 1054 Strategic Game(最小点覆盖+树形dp)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106048#problem/B 题意:给出一些点相连,找出最小的点数覆盖所有的 ...

  3. poj3041 Asteroids(二分图最小顶点覆盖、二分图匹配)

    Description Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape o ...

  4. HDU 4616 Game (搜索)、(树形dp)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4616 这道题目数据可能比较弱,搜索都可以AC,但是不敢写,哎…… 搜索AC代码: #include & ...

  5. HDU 1054 Strategic Game(最小路径覆盖)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 题目大意:给你一棵树,选取树上最少的节点使得可以覆盖整棵树. 解题思路: 首先树肯定是二分图,因 ...

  6. [ACM] HDU 1533 Going Home (二分图最小权匹配,KM算法)

    Going Home Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  7. HDU——T 1054 Strategic Game

    http://acm.hdu.edu.cn/showproblem.php?pid=1054 Time Limit: 20000/10000 MS (Java/Others)    Memory Li ...

  8. poj3041 二分图最小顶点覆盖

    Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17237   td>Accepted: 9375 ...

  9. POJ1325 Machine Schedule 【二分图最小顶点覆盖】

    Machine Schedule Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11958   Accepted: 5094 ...

随机推荐

  1. Qt中Ui名字空间以及setupUi函数的原理和实现

    用最新的QtCreator选择GUI的应用会产生含有如下文件的工程 下面就简单分析下各部分的功能. .pro文件是供qmake使用的文件,不是本文的重点[不过其实也很简单的],在此不多赘述. 所以呢, ...

  2. 管理集群中的 crs 管理员

     管理集群中的 crs 管理员 oracle Managing CRS Administrators in the Cluster Use the following commands to ma ...

  3. 基于visual Studio2013解决面试题之0708字符串全排列

     题目

  4. 通过IP或socket获取对方的MAC地址

    1.通过已经连接的socket文件获取: int getpeermac( int sockfd, char *buf ) { int ret =0; struct arpreq arpreq; str ...

  5. linux-mint下搭建android,angularjs,rails,html5开发环境 - qijie29896的个人空间 - 开源中国社区

    linux-mint下搭建android,angularjs,rails,html5开发环境 - qijie29896的个人空间 - 开源中国社区 http://blog.csdn.net/orzor ...

  6. JavaScript编程:javaScript核心基础语法

    1.javaScript核心基础语法: javaScript技术体系包含了5个内容:          1.核心语言定义:          2.原生对象和雷子对象:          3.浏览器对象 ...

  7. JSP的学习(8)——JSP标签

    JSP标签也称为JSP Action(JSP动作)元素,用于在JSP页面中封装Java代码,这样使得在JSP页面中避免直接编写Java代码,让JSP真正成为MVC模式中的作为视图作用. 几个JSP常用 ...

  8. 基于visual Studio2013解决面试题之0203栈实现

     题目

  9. [积累]C++复习 海大2014硕士生面试题微信系统总结

    好久没用C++了,正好同学有个面试题,于是就帮忙看了一下.尽管对C++的知识了解不少, 可是长期被Java浸淫, 发现这个简单的程序却也写着也不是那么顺手.好在最后还是搞定了,以下分析一下,题目例如以 ...

  10. Highcharts将数据以图表的形式展现

    1.首先将Highcharts插件所需的js跟css样式文件引入项目中,下载地址为:Highcharts.rar 2.在前台页面中添加一个存放图表的容器 <div id="contai ...