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;
}
HDU ACM 1054 Strategic Game 二分图最小顶点覆盖?树形DP的更多相关文章
- HDU - 1054 Strategic Game(二分图最小点覆盖/树形dp)
d.一颗树,选最少的点覆盖所有边 s. 1.可以转成二分图的最小点覆盖来做.不过转换后要把匹配数除以2,这个待细看. 2.也可以用树形dp c.匈牙利算法(邻接表,用vector实现): /* 用ST ...
- HDU 1054 Strategic Game(最小点覆盖+树形dp)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106048#problem/B 题意:给出一些点相连,找出最小的点数覆盖所有的 ...
- poj3041 Asteroids(二分图最小顶点覆盖、二分图匹配)
Description Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape o ...
- HDU 4616 Game (搜索)、(树形dp)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4616 这道题目数据可能比较弱,搜索都可以AC,但是不敢写,哎…… 搜索AC代码: #include & ...
- HDU 1054 Strategic Game(最小路径覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 题目大意:给你一棵树,选取树上最少的节点使得可以覆盖整棵树. 解题思路: 首先树肯定是二分图,因 ...
- [ACM] HDU 1533 Going Home (二分图最小权匹配,KM算法)
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- HDU——T 1054 Strategic Game
http://acm.hdu.edu.cn/showproblem.php?pid=1054 Time Limit: 20000/10000 MS (Java/Others) Memory Li ...
- poj3041 二分图最小顶点覆盖
Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17237 td>Accepted: 9375 ...
- POJ1325 Machine Schedule 【二分图最小顶点覆盖】
Machine Schedule Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11958 Accepted: 5094 ...
随机推荐
- 新浪SAE快速上手教程
新浪SAE快速上手教程[1]如何免费开通新浪云 2014-07-18 > 新浪SAE快速上手教程[2]如何创建.删除应用 2014-07-24 > 新浪SAE快速上手教程[3]如何上传应 ...
- C++能在三个地方创造对象,而Delphi只有一个地方
C++能在堆栈.堆.资料区创造对象. 但是Delphi只能在堆上创造对象
- 如何把 excel 的数据导入到数据库里面去
1. 把 excel 另存为 .csv 格式 2. 用 Notepad 打开 .csv 文件, 第一行就是全部的字段 3. 创建表结构 create table yu_rt_01 as select ...
- perl post 请求带参数
my $url='https://wenjinbao.winfae.com/business/dispatch_post.do?action=submitAdminLogin'; my $res ...
- Swift - 使用相机拍摄照片
1,打开相机拍照 通过设置图片控制器UIImagePickerController的来源为UIImagePickerControllerSourceType.Camera,便可以打开相机 1 2 3 ...
- 基于unity3d和leap motion的拼图游戏
近期用unity3d引擎做了一个拼图游戏,会分几次写完,以此作为总结. 本文基本查找了网上能查到的全部资料作为參考.也算是大家节省了时间. 眼下仅仅完毕了拼图部分,leap motion手势控制部分会 ...
- SqlServer中的数据类型UniqueIdentifier
SqlServer中的数据类型UniqueIdentifier究竟是什么东东? 该类型一般用来做为主键使用,可用SQL语法的newid()来生成一个唯一的值.我想请问的是,这个值是一个长整型的数据值呢 ...
- RMAN 备份
backup database; --备份整库 backup database format '\xxxxxx\xxx_%U'; --备份整库到指定路劲 backup tablespace users ...
- viewDidLoad、viewDidUnload、viewWillAppear、viewDidAppear、viewWillDisappear 和 -viewDidDisappear的区别和使用
首先看一下官方解释: - (void)loadView; // This is where subclasses should create their custom view hierarchy i ...
- hdu 4707 搜索 目前做的最水的搜索
直接深搜 ,水啊 #include<cstdio> #include<cstring> #include<algorithm> using namespace s ...