HDU1054 Strategic Game(树形dp)
2016-03-23 19:59
429 查看
题意:给出一棵树,要求找到最少放几个士兵才能将所有点都看守到,每个节点的士兵只能看守临近一个的节点
思路:
简单的树形dp,往下扫一次就好了
二分图也可做,应该不如树形dp快
思路:
简单的树形dp,往下扫一次就好了
二分图也可做,应该不如树形dp快
/* *********************************************** Author :devil Created Time :2016/3/21 14:13:19 ************************************************ */ #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <cmath> #include <stdlib.h> using namespace std; #define N 1510 int n,dp [2]; bool vis ; vector<int>eg ; void init() { for(int i=0;i<=n;i++) { eg[i].clear(); dp[i][0]=0; dp[i][1]=1; vis[i]=false; } } void dfs(int u) { vis[u]=true; for(int i=0;i<eg[u].size();i++) { int to=eg[u][i]; if(!vis[to]) dfs(to); dp[u][1]+=min(dp[to][1],dp[to][0]); dp[u][0]+=dp[to][1]; } } int main() { //freopen("in.txt","r",stdin); int x,m,y,root; while(~scanf("%d",&n)) { init(); for(int i=0;i<n;i++) { scanf("%d:(%d)",&x,&m); if(i==0) root=x; for(int j=0;j<m;j++) { scanf("%d",&y); eg[x].push_back(y); } } dfs(root); printf("%d\n",min(dp[root][0],dp[root][1])); } return 0; }
相关文章推荐
- 默认虚拟主机设置
- hdu 4497
- 结构体---职工信息结构体
- Go语言学习(一)变量
- hdu1166 敌兵布阵 线段树 单点更新区间查询
- 周记
- zifutongji
- AsyncTask下载网络图片
- Face Alignment at 3000FPS(C++版)工程配置
- Redis 数据库迁移
- hdu1421 搬寝室--DP
- Cookies和Session区别
- BZOJ 1815: [Shoi2006]color 有色图
- list()
- iOS 学习笔记四 【xcode 7.3 ESJsonFormat-Xcode 插件不能使用的解决办法】
- linux批量执行工具omnitty使用方法
- VS2010 显示TFS删除项
- HRBUST 1430 矩阵快速幂
- apache用户认证
- iperf3打流