poj 3659 树形dp(树上的最小支配集)

支配树 与 tarjan算法 简介什么是支配树?支配树是什么?XD 对于一张有向图(可以有环)我们规定一个起点r(为什么是r呢?因为网上都是这么规定的),从r点到图上另一个点w可能存在很多条路径(下面将r到w简写为r->w)。 如果对于r->w的任意一条路径中都存在一个点p,那么我们称点p为w的支配点(当然这也是r->w的必经点),注意r点不讨论支配点。下面用idom[u]表示离点u最近的支配点。 对于原图上除r外每一个点 阅读详情

题意:求树的最小支配集。

思路:动态规划。一开始每个点只取了两个变量,表示在以其为根的子树中选择和不选择该点的最少点数。由一组数据(6个点的路径)发现了问题,考虑第3个点的时候,如果不选择此点,那么第4个点必须要选取,实际上这是不必的。该组数据的最优解是选择第2和第5个点。

那么每个点加上一个变量好了:

dp1[x]表示选择第x个点。

dp0[x][0]表示不选择第x个点,而且该点并没有被儿子所覆盖。

dp0[x][1]表示不选择第x个点,但是该点已经被儿子所覆盖了,即至少有一个儿子被选择。

如此一来就对了,转移方程见代码,懒得写了。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <cstdlib>
using namespace std;
#define clc(s,t) memset(s,t,sizeof(s))
#define INF 0x3fffffff
#define N 10005
struct edge{
    int y,next;
}e[N<<1];
int first[N],n,top;
int dp1[N],dp0[N][2];
void add(int x,int y){
    e[top].y = y;
    e[top].next = first[x];
    first[x] = top++;
}
void dfs(int x,int fa){
    int son = 1,tmp = 0;
    for(int i = first[x];i!=-1;i=e[i].next){
        if(e[i].y != fa){
            son = 0;
            dfs(e[i].y,x);
            if(!dp0[x][1])//考虑第一个儿子
                dp0[x][1] = dp1[e[i].y];
            else
                dp0[x][1] = min(tmp+dp1[e[i].y] , dp0[x][1]+min(dp0[e[i].y][1],dp1[e[i].y]));
            tmp +=min(dp0[e[i].y][1],dp1[e[i].y]);
            dp1[x] += min(min(dp0[e[i].y][0],dp0[e[i].y][1]),dp1[e[i].y]);
            dp0[x][0] += dp0[e[i].y][1];
        }
    }
    dp1[x] ++;
    if(son)
        dp0[x][1] = 1;
}
int main(){
    int i,a,b;
    clc(first,-1);
    clc(dp1, 0);
    clc(dp0, 0);
    top = 0;
    scanf("%d",&n);
    for(i = 1;i<n;i++){
        scanf("%d %d",&a,&b);
        add(a,b);
        add(b,a);
    }
    dfs(1,0);
    printf("%d\n",min(dp1[1],dp0[1][1]));
    return 0;
}


CentOS7下OpenVPN Access Server 2.12.0安装与智能分流配置指南 本文详细介绍了在CentOS7系统上安装OpenVPN Access Server 2.12.0并进行智能分流配置的完整指南。从环境准备、核心安装到智能分流策略的深度配置,提供了经过验证的优化方案和故障排查技巧,帮助用户实现高效的VPN网关部署和流量管理。 阅读详情

相关推荐

Python爬虫实战:从巨潮网批量抓取上市公司年报JSON数据

网络爬虫作为自动化数据采集的核心技术,其原理是通过模拟浏览器行为向服务器发送HTTP请求并解析响应,从而高效获取结构化信息。在金融数据分析领域,这项技术价值尤为突出,能够将研究人员从繁琐的手工数据收集中解放出来,聚焦于更高阶的模型构建与价值挖掘。典型的应用场景包括上市公司财务研究、市场趋势分析和风险预警系统开发。本文以Python的requests库为核心工具,详细解析如何通过分析巨潮资讯网的JSON数据接口,构建一个稳定、高效的上市公司年报数据采集管道,并重点探讨了接口逆向、分页爬取、PDF文件下载等关键

weixin_42529366的博客 1232

树形dp(最小支配集)

http://poj.org/problem?id=3659 #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #include<vector> using namespace std; const int M...

weixin_30396699的博客 292

神州数码OSPF实战配置详解(手把手教学)

本文提供神州数码设备上OSPF基础配置的详细实战教程。通过搭建典型的两台三层交换机互联实验环境,手把手演示了VLAN创建、接口IP配置、OSPF进程启动、Router-ID设置及网络宣告等核心步骤,并分享了邻居状态验证、路由检查及常见排错方法,帮助网络工程师快速掌握神州数码OSPF的配置要点与操作技巧。

weixin_29210727的博客 79

POJ 3659 Cell Phone Network(贪心)

基本概念: 树的支配集:对于图G = (V, E),  若点集V‘是图的一个支配集,则对于图中任意一个顶点u , 要么u属于V’,要么与V‘中顶点相邻。 而读懂题意后,这个题就是一个裸的树的最小支配集了,很多人都是用的树形dp,弱菜表示不会。。。于是。。。只好写个贪心的代码A了。。。 求树的最小支配集的贪心解法是: 选择一个点,求出dfs序列,按照得到的序列的反向序列进行贪心,对于一个既不属

diary_yang的专栏 977

Nifi SNI 问题解决方案

Nifi 在配置 SSL 时,如果没有正确设置主机名(SNI),就会导致。为了解决这个问题,我们需要重新配置 Nifi 的 SSL 证书,并确保所有相关配置项(如服务器地址、证书路径和密码等)正确无误。以下是一个详细的解决步骤,以帮助你正确配置 Nifi 并解决 SNI 错误。文件中的配置项(如服务器地址、端口和证书路径),以及正确设置用户凭证。通过这些配置,你可以确保 Nifi 在支持 HTTPS 的同时,正确处理 SSL/TLS 的 SNI 问题。文件,配置服务器地址、端口以及证书路径和密码。

m0_58786911的博客 2295

关于IBV_WR_RDMA_WRITE_WITH_IMM的理解

对于IBV_WC_RECV_RDMA_WITH_IMM的描述是这样的,也就是说并不需要sge,所以下发的sge,可以是NULL,个数可以是0。(1)需要下发post_recv,但是下发是post_recv当中的sge的地址可以是空,sge个数可以是0。伪代码,实际的rkey和addr已经通过socket交换。并且poll_cq时,有返回,在这篇文章当中对于poll_cq时,主要区别点有两个,这个是对于接收端而言。(2)可以带即时数据,

qq_38158479的博客 2418

poj-3659 Cell Phone Network(最小支配集+贪心)

http://poj.org/problem?id=3659 Description Farmer John has decided to give each of his cows a cell phone in hopes to encourage their social interaction. This, however, requires him to se...

weixin_30299539的博客 170

智能车图像处理24-进阶篇16--三叉路口的判断

这篇文章主要讲述图像处理中如何判断三叉路口并进行补线操作。

taiyuezyh的博客 1万+

算法学习——树型dp求树的最小支配集

算法学习——树型dp与最小支配集

QXinHan的博客 378

OpenClaw入门必装Skills(附使用场景)

很多同学安装了OpenClaw后,但却不会使用,就相当于你只是拥有了一副强大的躯干,却没有给它装上能够灵活执行任务的“手脚”和负责思考决策的“大脑插件”——Skills。没有这些核心能力的支撑,OpenClaw只是一个“空壳”,无法真正应用到实际业务场景中,更谈不上提升效率或解决复杂问题。所以,安装只是第一步,要真正让OpenClaw“活”起来,为我们所用,就需要给OpenClaw安装各种Skills,这个过程就是养虾的过程。

十二测试录 3222

Ubuntu24.04安装搜狗输入法详细教程

本章教程,介绍如何在Ubuntu24.04版本操作系统上安装搜狗输入法。

猿小白的博客 1万+

树的最小支配集、最小点覆盖、最大独立集【模板】

最小支配集:指从所有顶点中取尽量少的点组成一个集合,使得剩下的所有点都与取出来的点有边相连。顶点个数最小的支配集被称为最小支配集。这里用贪心法来求。 1.以1号点深度优先搜索整棵树,求出每个点在DFS中的编号和每个点的父亲节点编号。  2.按DFS的反向序列检查,如果当前点既不属于支配集也不与支配集中的点相连,且它的父亲也不属于支配集,将其父亲点加入支配集,支配集个数加1。  3.标记当前结点、...

月殇 503

Cadence OrCAD Capture软件启动过程卡死且无法恢复的解决方法

如下图所示Cadence OrCAD Capture软件在启动后出现卡死的现象,且等待后无法自动恢复,需要强行关闭,再次启动依然卡死。

fydar的博客 4042

*【POJ - 3659】Cell Phone Network (树形dp,最小支配集)

题干: Farmer John has decided to give each of his cows a cell phone in hopes to encourage their social interaction. This, however, requires him to set up cell phone towers on hisN(1 ≤N≤ 10,000) pas...

xuanweiace的博客 696

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

poj3659 Cell Phone Network(最小支配集-树形dp)

题目链接:点击打开链接 题目描述:给定一棵树,从中选取尽量少的点使每个点要么被选中,要么和被选中的点直接相连? 解题思路:树上的最小支配集,树形dp dp[i][0]:选中i作为支配集 dp[i][1]:不选i作为支配集,但其子节点覆盖了i dp[i][2]:不选i作为支配集,而且其子节点没有覆盖i 代码:

Crazy_Bear 878

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

POJ-3659 Cell Phone Network

题目链接: POJ-3659 题意: 给你一棵树,在树上装一些信号搭,有信号搭的节点可以使得自己和相邻的节点有信号,问最小安装多少个节点使得树上任意一个点都能有信号。 题解:这个就是求最小支配集,用树形dp一下就好。 dp[u][0] 代表不取i节点,靠子节点覆盖, dp[u][1]代表去u节点 , dp[u][2]代表不取u节点,靠父节点覆盖 代码如下: #include<iostream...

accepted_accepted的博客 269

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【POJ】3659 Cell Phone Network 树上的极小支配集——树型DP

Cell Phone Network Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5524 Accepted: 1984 Description Farmer John has decided to give each

poursoul 761

POJ-3659 Cell Phone Network(图的最小支配集+树形dp+处理点)

Cell Phone Network Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7241   Accepted: 2581 Description Farmer John has decided to give each of his cows a cell phone in hop...

碳酸钙的01妖精的博客 620

POJ 3659 Cell Phone Network(树形DP)

Description 给出一棵点数为n的树,求这棵树的最小点覆盖 Input 第一行为一整数n表示树的点数,之后n-1行每行两个整数a和b表示树上a和b之间有一条边 Output 输出这棵树的最小点覆盖 Sample Input 5 1 3 5 2 4 3 3 5 Sample Output 2 Solution dp[i][0]表示i属于支配集,并且以i为根的子树都

ZSQ 730

树形DP求树的最小支配集,最小点覆盖,最大独立集

转自:https://www.cnblogs.com/Ash-ly/p/5783877.html 一:最小支配集 考虑最小支配集,每个点有两种状态,即属于支配集合或者不属于支配集合,其中不属于支配集合时此点还需要被覆盖,被覆盖也有两种状态,即被子节点覆盖或者被父节点覆盖.总结起来就是三种状态,现对这三种状态定义如下: 1):dp[i][0],表示点 i 属于支配集合,并且以点 i 为根的子树都被覆盖了的情况下支配集中所包含最少点的个数. 2):dp[i][1],表示点 i 不属于支配集合,且以 i

Falcon的博客 720

【学习笔记】支配树

I started writing it during my trip in HongKong. Actually I wanna use English first, because I didn't really know how to set the language settings as the computer there used English. But soon it was solved. By the way, the hotel offered free computer.

七代目鸽影 565

POJ3659:最小支配集

POJ3659 题意:最小点覆盖所有的点。 题解 首先要明确最小支配集和最小点覆盖的区别。 最小点覆盖是选取最少的点,使所有的边都与集合的点相连。最小点覆盖 = 二分图最大匹配 最小支配集是选取最少的点,使所有的点都与集合的点相连。如果是树的话,树形DP解决。 在discuss有一组数据可以说明问题,放在代码最下面,自己画图看看。 dp[i][j]以i为根的最小覆盖。 dp[...

FlyingJack 518

poj3659 Cell Phone Network(树形dp)

树的最小支配集; 给一颗树,每个节点可以覆盖和他相连的所有节点,问用最少的点把所有的点覆盖完。 比poj 1463难,关键是思考要全面 dp[u][0]表示u的子树及以下的结点全部被覆盖,但u被自己覆盖; dp[u][2]表示u的子树及以下的结点全部被覆盖,但u被自己的父亲结点覆盖。 dp[u][1]表示u的子树及以下的结点全部被覆盖,但u被自己的儿子结点覆盖。 dp[u][0]+=m...

KXL5180的博客 261

图论 —— 支配树

【概述】 给定一个有向图与一个起点 S,如果要去掉起点 S 到某个点 p 的中间的某个点 x后无法到达,那么称点 x 支配点 p,x 是 p 的一个支配点。 显然支配点 x 可以有多个,支配点的集合记为 {Xp},对于起点以为的点,它们都有两个平凡的支配点,一个是其自身,一个是起点。 在支配 p 的点中,若一个支配点 i≠p,满足 i 被 p 剩下的所有非平凡的支配点支配,则称 i 为...

Alex_McAvoy的博客 6182

支配树详解

什么是支配树? 对于一张有向图,确定一个根,如果根到 x 的每条路径都经过 y,那么称 y 是 x 支配点。求出原图的一个 dfs 树,那么 x 的支配点一定在 x 到根的链上。如果每个点向自己深度最深的支配点连边,就构成了支配树。 明确一些有向图 dfs 树的性质: 1.树边总是由 dfn 小的点指向 dfn 大的点,非树边(两端点无祖先关系)总是由 dfn 大的点指向 dfn 小的点。 2.若...

Hellsegamosken 4480

poj 3659 Cell Phone Network 树型DP也是树的最小支配集

题目:poj 3659 Cell Phone Network 题意:农夫给他的每个牛发另一个手机(有点扯),现在要在农场建设信号塔以便所有的牛可以相互联系,每个信号塔可以供和他相连的农场使用,所有农场形成一颗树,问要达到要求最少建塔的数量。也就是给一颗树,每个节点可以覆盖和他相连的所有节点,现在问你用最少的点把所有的点覆盖完。 这个题目和poj1463有点相似,poj1463是用点覆盖边,相对

nyist_jiang 3078
上一篇: poj 3661 dp(Running)
下一篇: 安装RegExr
dumeichen
博客等级 码龄13年 55粉丝 475原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值