[ 树形DP 贪心 ] Codeforces958B2 Maximum Control (medium)

9人阅读 评论(0) 收藏 举报
分类:

可以发现最优的选点方案一定包含直径的 2 个端点,而且选的一定是叶子节点。
把直径的一个端点作为根,那么所有方案都会选根。这样每次多选一个点都是一段从叶子向根的路径。记下所有路径,每次取最大值就好了。

#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int k,n,m,x,y;
int h[N],nx[N<<1],t[N<<1],num;
int d[N];
int son[N],dp[N],Rt;
int a[N],cnt,Ans[N];
void Add(int x,int y) {
    t[++num]=y;nx[num]=h[x];h[x]=num;
}
void Dfs(int x,int y) {
    d[x]=d[y]+1;
    for(int i=h[x];i;i=nx[i])
        if(t[i]!=y) Dfs(t[i],x);
    if(d[x]>d[Rt]) Rt=x;
}
void DP(int x,int y) {
    for(int i=h[x];i;i=nx[i])
        if(t[i]!=y) {
            DP(t[i],x);
            if(dp[t[i]]>dp[son[x]]) son[x]=t[i];
        }
    dp[x]=dp[son[x]]+1;
    for(int i=h[x];i;i=nx[i])
        if(t[i]!=y&&t[i]!=son[x]) a[++cnt]=dp[t[i]];
}
int main() {
    scanf("%d",&n);
    for(int i=1;i<n;i++) scanf("%d%d",&x,&y),Add(x,y),Add(y,x);
    Dfs(1,0);
    DP(Rt,0);a[++cnt]=dp[Rt];
    sort(a+1,a+cnt+1);
    for(int i=cnt;i;i--) Ans[cnt-i+2]=Ans[cnt-i+1]+a[i];
    Ans[1]=1;
    for(int i=1;i<=n;i++) printf("%d ",i<=cnt+1?Ans[i]:n);
    return 0;
}
查看评论

【bzoj2466】【caioj1113】树---树形DP/高斯消元+dfs

传送门:caioj 题目描述 【问题描述】 图论中的树为一个无环的无向图。给定一棵树,每个节点有一盏指示灯和一个按钮。如果节点的按扭被按了,那么该节点的灯会从熄灭变为点亮(当按之前是熄灭的),...
  • qq_27121257
  • qq_27121257
  • 2017-10-05 19:14:06
  • 155

BZOJ 1907 树的路径覆盖 树形DP

题目大意:给定一棵树,求最小路径覆盖 数据范围1W,看到还想跑网络流来着= = 不过算了明明树形DP这么水还是不要用网络流这种大杀器为好 首先将所有的链都考虑成以链上所有点的LCA为转折点的V字形...
  • PoPoQQQ
  • PoPoQQQ
  • 2015-02-23 19:55:45
  • 1445

贪心和dp

写得不错 http://blog.csdn.net/yelbosh/article/details/7649717本质都是对解空间遍历的剪枝若以原问题为根,各个子问题为各层子树,每层子问题的解为此层...
  • crella___
  • crella___
  • 2017-02-13 22:25:59
  • 151

Hdu 6178 Monkeys【树形Dp-最小点覆盖+贪心思维】

Monkeys Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 153428/153428 K (Java/Others) Tota...
  • mengxiang000000
  • mengxiang000000
  • 2017-08-24 21:59:15
  • 681

[BZOJ1907]树的路径覆盖(贪心||树形dp)

Being yourself is an honor, because nobody else can be you. 做自己是一种荣耀,因为没有任何人能成为你。...
  • Clove_unique
  • Clove_unique
  • 2016-10-03 09:24:01
  • 616

树形DP整理小结

树形DP: 在树上进行dp,树是递归的定义的,所以树形dp也是递归的求解,一般而言,dp[node]表示的是以node为根的子树能得到的最优解 一般而言,dp[node]需要从node的子结点进行状态...
  • tomorrowtodie
  • tomorrowtodie
  • 2016-08-24 15:38:21
  • 1129

LeetCode 124: Binary Tree Maximum Path Sum 树形动态规划

博客转载请注明地址:http://blog.csdn.net/sunliymonkey/article/details/48179427题目描述题目地址:https://leetcode.com/pr...
  • SunliyMonkey
  • SunliyMonkey
  • 2015-09-02 15:52:14
  • 1477

树形动态规划(树形DP)入门问题—初探 & 训练

树形DP入门 poj 2342 Anniversary party   先来个题入门一下~ 题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的...
  • txl16211
  • txl16211
  • 2015-04-29 22:40:03
  • 10966

Media Access Control

The Media Access Control (MAC) data communication protocol sub-layer, also known as the Medium Acces...
  • ssucc
  • ssucc
  • 2010-07-19 16:06:00
  • 1326

树形DP例题整理

与普通dp类似,但是状态遍历不能简单的++i,而应该按由儿子到父亲的顺序完成。可以通过DFS递归完成,也可以按DFS(BFS)序从大到小完成,以保证先完成儿子再完成父亲。例题一 皇宫看守 tyvj_...
  • Mr_Poisonous
  • Mr_Poisonous
  • 2017-08-17 17:40:56
  • 141
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 2250
    排名: 1万+
    最新评论