题意:有以个 有 N 个节点的树形地图,问在这些顶点上最少建多少个电话杆,可以使得所有顶点被覆盖到,一个节点如果建立了电话杆,那么和它直接相连的顶点也会被覆盖到。

分析:用最少的点覆盖所有的点,即为求最少支配集。  可以用树形DP。

①  dp[r][0] += min(dp[i][0],dp[i][1],dp[i][2])    dp[r][0]表示在自 r 顶点自身建, 以 r 为根节点的树所需要的最少覆盖数。
       ②  dp[r][1] += min(dp[i][0],dp[i][1])                dp[r][1]表示在r 的子节点建,     以 r 为根节点的树所需要的最少覆盖数。
       ③  dp[r][2] += min(dp[i][0],dp[i][1])                dp[r][2]表示在r 的父节点建,     以 r 为根节点的数所需要的最少覆盖数。

对于dp[i][1],要考虑全面,也就是说:必须要有一个孩子建塔,才能保证i被覆盖(Min=sum(min(dp[v][0]-dp[i][1])),也就是当所有孩子的dp[v][0]>dp[v][i]时,Min表示他们差值最小的那个差值)。

所以方程是dp[i][1]+=min(dp[v][0],dp[1])(至少存在一个孩子的dp[v][0]<=dp[v][1],否则要dp[i][1]+=Min);

AC代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define M 10007
#define inf 0x3f3f3f
using namespace std;
int dp[M][];
int head[M],k,n;
bool vis[M]; struct sa{
int v,next;
}edg[M*]; void addedge(int u,int v)
{
edg[k].v=v;
edg[k].next=head[u];
head[u]=k++;
} void dfs(int key)
{
bool flag=true;
vis[key]=false;
dp[key][]=;
dp[key][]=dp[key][]=;
int minn=inf;
for(int i=head[key];i!=-;i=edg[i].next)
{
int v=edg[i].v;
if(vis[v])
{
dfs(v);
dp[key][]+=min(dp[v][],min(dp[v][],dp[v][]));
dp[key][]+=min(dp[v][],dp[v][]);
if(dp[v][]<=dp[v][])
{
flag=false;
dp[key][]+=dp[v][];
}
else
{
dp[key][]+=dp[v][];
minn=min(minn,dp[v][]-dp[v][]);
}
}
}
if(flag)
dp[key][]+=minn;
} int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d",&n)!=EOF)
{
memset(vis,true,sizeof(vis));
memset(head,-,sizeof(head));
k=;
int a,b;
while(--n)
{
scanf("%d%d",&a,&b);
addedge(a,b);
addedge(b,a);
}
dfs();
printf("%d\n",min(dp[][],dp[][]));
}
return ;
}

最新文章

  1. Xcode最好用的日志打印方法
  2. ADO.Net读取器获取数据库数据
  3. 无需Try catch 的UI事件封装类
  4. js拖动层原形版
  5. 通过innobackupex实现对MySQL的完整备份与还原
  6. [转载]基于TFS实践敏捷-实现用户场景
  7. 没接触C++之前与学习了C++之后的思想转变
  8. java随笔 乱腾腾的 一些东西
  9. Oracle日期函数
  10. MySQL数字类型中的三种常用种类
  11. utf8_to_utf16
  12. MySQL 数据库入门操作
  13. TNS-12541,TNS-12560,TNS-00511,TNS-12542,TNS-12560,TNS-00512数据库启动监听报错
  14. 限制**类型物料不能输入BOM
  15. Scala学习---映射和元祖
  16. log4j.appender.stdout.layout.ConversionPattern
  17. 我们web前端常用的一些Array对象及应用
  18. Struts(十九):类型转换、类型转换错误消息及显示
  19. 在Vue项目中使用Element UI:按需引入和完整引入
  20. 【读书笔记】iOS-自定义 URL Scheme 完全指南

热门文章

  1. queue队列模块
  2. 关于handler和异步任务
  3. 【总结整理】WMS、WMTS、WFS
  4. Codeforces #505(div1+div2) D Recovering BST
  5. UIActionSheet(操作列表)
  6. 高性能MySQL笔记-第5章Indexing for High Performance-001B-Tree indexes(B+Tree)
  7. ZROI2018普转提day7t2
  8. CH24C 逃不掉的路
  9. 树莓派研究笔记(9)-- 树莓派SPI连接TFT屏幕
  10. javax.servlet.http.httpServletRequest接口