Strategic game POJ - 1463 树型dp
//题意:就是你需要派最少的士兵来巡查每一条边。相当于求最少点覆盖,用最少的点将所有边都覆盖掉
//题解:
//因为这是一棵树,所以对于每一条边的两个端点,肯定要至少有一个点需要放入士兵,那么对于x->y这一条边
//dp[x][0]=0 表示在x这一点上不放人士兵
//dp[x][1]=1 表示在x这一个点上放入士兵
//那么就有
//dp[x][0]+=dp[y][1];
//dp[x][1]+=min(dp[y][0],dp[y][1]);
//注意这一道题不需要建立一个图,然后再去dfs,因为题目上就是按树从根到叶逐渐给出的。所以可以直接存
//belong用来表示每一个点的层数,pre表示它的父亲节点
第一次我是建了一个图去找dp,然后就MLE了
1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 using namespace std;
6 const int maxn=1500;
7 struct edge
8 {
9 int v,next;
10 }e[maxn];
11 int cnt,head[maxn],dp[maxn][5];
12 void add_edge(int x,int y)
13 {
14 e[cnt].v=y;
15 e[cnt].next=head[x];
16 head[x]=cnt++;
17 }
18 int n;
19 void dfs(int x,int pre)
20 {
21 dp[x][0]=0;
22 dp[x][1]=1;
23 for(int i=head[x];i!=-1;i=e[i].next)
24 {
25 int to=e[i].v;
26 //printf("%d %d\n",x,to);
27 if(to==pre)
28 {
29 //printf("**%d**%d\n",x,to);
30 continue;
31 }
32 dfs(to,x);
33 dp[x][0]+=dp[to][1];
34 dp[x][1]+=min(dp[to][1],dp[to][0]);
35 }
36 }
37 int main()
38 {
39 while(~scanf("%d",&n))
40 {
41 memset(head,-1,sizeof(head));
42 cnt=0;
43 memset(dp,0,sizeof(dp));
44 int x,y,sum,u,flag=0;
45 for(int i=1;i<=n;++i)
46 {
47 scanf("%d:(%d)",&x,&sum);
48
49 x++;
50 if(flag==0)
51 {
52 flag=1;
53 u=x;
54 }
55 while(sum--)
56 {
57 scanf("%d",&y);
58 y++;
59 add_edge(x,y);
60 add_edge(y,x);
61 }
62 }
63 //printf("%d**\n",u);
64 dfs(u,u);
65 printf("%d\n",min(dp[u][0],dp[u][1]));
66 }
67 return 0;
68 }
正解:
1 //题意:就是你需要派最少的士兵来巡查每一条边。相当于求最少点覆盖,用最少的点将所有边都覆盖掉
2 //题解:
3 //因为这是一棵树,所以对于每一条边的两个端点,肯定要至少有一个点需要放入士兵,那么对于x->y这一条边
4 //dp[x][0]=0 表示在x这一点上不放人士兵
5 //dp[x][1]=1 表示在x这一个点上放入士兵
6 //那么就有
7 //dp[x][0]+=dp[y][1];
8 //dp[x][1]+=min(dp[y][0],dp[y][1]);
9
10 //注意这一道题不需要建立一个图,然后再去dfs,因为题目上就是按树从根到叶逐渐给出的。所以可以直接存
11 //belong用来表示每一个点的层数,pre表示它的父亲节点
12 #include<stdio.h>
13 #include<string.h>
14 #include<iostream>
15 #include<algorithm>
16 using namespace std;
17 const int maxn=1505;
18 int belong[maxn],pre[maxn],dp[maxn][5],cnt;
19 int n;
20 void DP(int x,int index)
21 {
22 dp[x][0]=0;
23 dp[x][1]=1;
24 for(int i=1;i<=n;++i)
25 {
26 if(pre[i]==x)
27 {
28 DP(i,index+1);
29 dp[x][0]+=dp[i][1];
30 dp[x][1]+=min(dp[i][0],dp[i][1]);
31 }
32 }
33 }
34 int main()
35 {
36 while(~scanf("%d",&n))
37 {
38 memset(pre,0,sizeof(pre));
39 memset(dp,0,sizeof(dp));
40 memset(belong,0,sizeof(belong));
41 cnt=0;
42 int x,y,sum,u,flag=0;
43 for(int i=1;i<=n;++i)
44 {
45 scanf("%d:(%d)",&x,&sum);
46 x++;
47 belong[x]=++cnt;
48 if(flag==0)
49 {
50 flag=1;
51 u=x;
52 }
53 cnt++;
54 while(sum--)
55 {
56 scanf("%d",&y);
57 y++;
58 pre[y]=x;
59 // add_edge(x,y);
60 // add_edge(y,x);
61 belong[y]=cnt;
62 }
63 }
64 pre[u]=-1;
65 DP(u,1);
66 printf("%d\n",min(dp[u][0],dp[u][1]));
67 }
68 return 0;
69 }
Strategic game POJ - 1463 树型dp的更多相关文章
- poj 2378 树型dp
和poj1655那道求树的重心基本上一样的,代码也没多大改动. 详情请见 #include<cstdio> #include<algorithm> #include<cs ...
- 树形dp compare E - Cell Phone Network POJ - 3659 B - Strategic game POJ - 1463
B - Strategic game POJ - 1463 题目大意:给你一棵树,让你放最少的东西来覆盖所有的边 这个题目之前写过,就是一个简单的树形dp的板题,因为这个每一个节点都需要挺好处 ...
- 【POJ 3140】 Contestants Division(树型dp)
id=3140">[POJ 3140] Contestants Division(树型dp) Time Limit: 2000MS Memory Limit: 65536K Tot ...
- 【POJ 2486】 Apple Tree(树型dp)
[POJ 2486] Apple Tree(树型dp) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8981 Acce ...
- POJ 3342 - Party at Hali-Bula 树型DP+最优解唯一性判断
好久没写树型dp了...以前都是先找到叶子节点.用队列维护来做的...这次学着vector动态数组+DFS回朔的方法..感觉思路更加的清晰... 关于题目的第一问...能邀请到的最多人数..so ea ...
- HDU_1520_Anniversary party_树型dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Time Limit: 2000/1000 MS (Java ...
- POJ3659 Cell Phone Network(树上最小支配集:树型DP)
题目求一棵树的最小支配数. 支配集,即把图的点分成两个集合,所有非支配集内的点都和支配集内的某一点相邻. 听说即使是二分图,最小支配集的求解也是还没多项式算法的.而树上求最小支配集树型DP就OK了. ...
- 【XSY1905】【XSY2761】新访问计划 二分 树型DP
题目描述 给你一棵树,你要从\(1\)号点出发,经过这棵树的每条边至少一次,最后回到\(1\)号点,经过一条边要花费\(w_i\)的时间. 你还可以乘车,从一个点取另一个点,需要花费\(c\)的时间. ...
- 洛谷P3354 Riv河流 [IOI2005] 树型dp
正解:树型dp 解题报告: 传送门! 简要题意:有棵树,每个节点有个权值w,要求选k个节点,最大化∑dis*w,其中如果某个节点到根的路径上选了别的节点,dis指的是到达那个节点的距离 首先这个一看就 ...
随机推荐
- 爬虫-urllib3模块的使用
urllib3是一个功能强大,对SAP健全的 HTTP客户端,许多Python生态系统已经使用了urllib3. 一.安装 sudo pips install urllib3 二.创建PoolMana ...
- 【ORA】ORA-00257 archiver error. 错误的处理方法
今天连接数据库,结果报错,ora-00257查看 [oracle@exam oracle]$ oerr ora 00257 00257, 00000, "archiver error. Co ...
- 本地jar添加到本地仓库 本地jar依赖无效问题
最近工作发生了一个很奇怪的事情,我在本地写了一个项目,打包成jar,然后敲命令mvn install:install-file -DgroupId=com.yzwine -DartifactId=yz ...
- JAVA编程中button按钮,actionlistener和mouseClicked区别
在java的编程中,对于按钮button 有两个事件: 1.actionPerformed 2.mouseClicked 区别: actionPerformed:一般事件,仅侦听鼠标左键的单击事件,右 ...
- 2V转5V输出,2.4V转5V输出,DC-DC同步整流升压电路
PW5100可以适用于2V转5V和2.4V转5V的应用电路中,PW5100是一颗DC-DC的同步升压转换器芯片. PW5100特点: 1, 低输入,宽范围:0.7V-5V 2, 输出电压固定,外围少: ...
- .net code+vue 文件上传
后端技术 .net code 官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/mvc/models/file-uploads?view=aspnet ...
- 阿里云VPC网络内网实例通过SNAT连接外网
场景: 1.有多个ECS实例,其中A实例有公网IP,可以上外网 其它实例没有公网IP,不能上外网 2.所有实例在一个交换机,也就是一个网络(172.16.0.0/16) 实例 内网IP 外网IP A ...
- Vue基础之插值表达式的另一种用法!附加变量的监听!
Vue基础之插值表达式的另一种用法!附加变量的监听! 讲这个之前我们先回顾一下原来的用法! <body> <!-- Vue.js的应用可以分为两个重要的组成部分 一个是视图! 另一个 ...
- 新编日语1234册/重排本/全册 pdf
网上找的资源链接大部分都失效了,无奈之下只好淘宝购买.顺便分享一下吧. 链接: https://pan.baidu.com/s/1v5-osHKrIPzlgpd8yNIP5Q 提取码: kexn
- 3.kafka安装配置
kafka安装配置 ### 1.集群规划 hadoop102 hadoop103 hadoop104 zk zk zk kafka kafka kafka jar包下载 http://kafka.ap ...