March 12th 2015 POJ1947 <9:26>

题目网址:http://poj.org/problem?id=1947

大意:给定n个点、n-1条边的一棵树,求最少删除多少边使得此时这棵树恰剩有p个结点。

  打算今天刚开始做会树形DP,于是就搜到了这道题。也算一道入门题。既然是到DP,显然就可以设状态F[R][i]表示使以R为根节点的子树剩有i个子节点的最小代价。然后考虑它的所有儿子节点s:只有选或者不选;

  选的时候:F[R][i]=min(F[s][i-j]+F[R][j])(1<=j<i);

  不选的时候:F[R][i]=F[R][i]+1;

  整理一下就变成了:F[R][i]=min(F[s][i-j]+F[R][j],F[R][i]+1).最后扫一遍F[1..n][p]的最小值即可。注:打擂台时,除了根节点,其余子节点的F[i][p]需要+1,因为它要先与根节点断开联系,要先删一条边。(本来我也没想到,经大神提醒)。

  代码:

/*
Author: ALXPCUN
PROG: poj 1947
DATE: 2015.3.12
*/

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#define REP(i,s,n) for(int i=s;i<=n;i++)
#define REP_(i,s,n) for(int i=n;i>=s;i--)
#define CLR(a,b) memset(a,b,sizeof(a))

using namespace std;

const int MAX_N=150+10;

int n,p,F[MAX_N][MAX_N],P[MAX_N],R;
bool Used[MAX_N];

void DP(int R);
int Solve();

int main(){
    scanf("%d%d",&n,&p);
    REP(i,1,n-1){
        int s,t;
        scanf("%d%d",&s,&t);
        P[t]=s; Used[t]=1;
    }
    REP(i,1,n) if(!Used[i]) R=i;

    CLR(Used,0);
    printf("%d\n",Solve());

    //system("pause");
    return 0;
}

void DP(int R){
    REP(i,1,n) F[R][i]=10000;
    F[R][1]=0;
    REP(k,1,n){
        if(!Used[k]&&P[k]==R){
            DP(k);

            REP_(i,1,p){
                int tmp=F[R][i]+1;
                REP(j,1,i-1) tmp=min(tmp,F[k][i-j]+F[R][j]);
                F[R][i]=tmp;
            }
        }
    }
}
int Solve(){
    DP(R);
    int ans=F[R][p];
    REP(i,1,n) ans=min(ans,F[i][p]+1);

    return ans;
}
时间: 2024-12-21 20:11:11

March 12th 2015 POJ1947 <9:26>的相关文章

March 3rd 2015 &lt;11:31&gt;

spoj 1167 <MINCOUNT> http://www.spoj.com/problems/MINCOUNT/ 一个高度为h的正立三角形,由硬币拼成,现在把这个三角形通过一动硬币位置变成倒立等大的三角形,求最少移动硬币数. 其实也就是求正立与倒立两个三角形最小不重叠部分,列几个例子我发现,重叠部分最大是三分之二,即不重叠的就是三分之一.高度为h的三角形共由[h*(h+1)]/2个硬币组成,它的三分之一=[h*(h+1)]/6.但是数据较大,会溢出.我们使h=2a+b,h+1=3c+d.

Marth 12th 2015 集训总结 &lt;22:13&gt;

又被贾老师教育了.事情的经过是这样的:今天上午大概十点十一点左右,贾老师突然进了机房,很严肃地说:“八十中的同学出来一下.”我们几个诚惶诚恐地进了老师办公室,谁知道.“这几天训练挺辛苦的,这儿有点蛋糕你们分了吃吧.”老师这样告诉我们.虚惊一场(其实也没什么可惊的).我们便愉快地分吃了一半的蛋糕,巧克力味的,味道很不错,感觉应该是刚从冰箱里拿出来的,入口冰凉清爽,口感很好.休闲之余,我们随手翻了翻老师的书柜:各种计算机技术方面的(PHP,黑书,第二版算导etc.),还有什么文学类的,一些说不出准确

March 11th 2015 集训总结&lt;23:15&gt;

今天是集训的第四天,每天都有考试,虽说每天都没有公布真实姓名的成绩,但是今天竟然四天一起出了,这是要秋后算账啊...前两场比赛我没有参加,第三场因为自己太差了,得了0分,第四场就没敢交.今天老师出示成绩的时候感觉丢死人了!还还好老师并没有点名. 过了一会儿,老师给我们根据这个成绩估计着划分了今年NOI的金牌线,虽然我果断没有在这个线之上,但是不知道为什么突然感觉好兴奋!好激动!一下子又充满了自信,觉得达到这个行列我也能做到!——感觉自己的精神胜利法学的很好.然后下午做题的时候也是干劲十足,也没有

March 29th, 2015, Thread Name is odd by increasing 1

public class Fabric extends Thread{ public static void main(String args[]){ Thread t = new Thread(new Fabric()); Thread t2 = new Thread(new Fabric()); Thread t3 = new Thread(new Fabric()); t.start(); t2.start(); t3.start(); } public void run(){ Syste

March 30 2017 Week 13 Thursday

I learned the value of hard work by working hard. 只有真的努力了,才会知道努力的价值. On the day, March 12th 2017, I wrote the same words, and I felt the same feelings just as I feel today, depressed and frustrated. Every time I though I could bring an end to it, une

老男孩26期运维班linux基础知识大比拼即将开始

老男孩26期运维班linux基础知识大比拼 1 比赛说明 比赛时间:2015年11月12日下午15点 比赛地点:老男孩教育教室二 比赛人员:老男孩教育26期全体同学 奖项:团体奖(按组奖励共1-9组): 一等奖奖励300元人民币或每人老男孩老师新书一本和老师合影签名. 二等奖奖励200元人民币 三等奖奖励100元人民币 个人奖:3名,赠老男孩新书一本 惩罚:没有得奖的组,或者组内无人得奖的组,罚100元或派选代表表演一个节目(唱歌或其它) 比赛规则当场宣布: 主评委:老男孩老师,张导 辅助评委:

Git for Windows v2.11.0 Release Notes

homepage faq contribute bugs questions Git for Windows v2.11.0 Release Notes Latest update: December 1st 2016 Introduction These release notes describe issues specific to the Git for Windows release. The release notes covering the history of the core

TypeScript系列1-1.5版本新特性

1. 简介 随着PC端快速向移动端迁移,移动(体验)优先的概念也越来越响.由于ReactJS目前移动端仅仅支持iOS,因此移动端Web开发框架只能选择: AngularJS/Angula2 + Ionic框架 + Cordova.想要学习好Angula2以及阅读其代码, 就必须了解和学习TypeScript,也因此需要学习好ES6以及Web Component.近期将开始学习TypeScript语言. 下面先看看TypeScript语言的发展: 鉴于JavaScript这种脚本语言很难应用于大规

为什么国外程序员爱用 Mac?

from http://www.vpsee.com/2009/06/why-programmers-love-mac/ Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里.普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒.那么为什么专业人士也对 Mac 情有独钟呢?从个人使用经验来看我想有下面几个原因: 1.Mac OS X 是基于 Unix 的.这一点太重要了,尤其是对开发人员,至少对于我来说很重要,这意味着Unix 下一堆好用的工具都可以随手捡到.