zoukankan      html  css  js  c++  java
  • [POI2014]FAR-FarmCraft [树形dp 贪心]

    [POI2014]FAR-FarmCraft

    P3574 [POI2014]FAR-FarmCraft

    随手扒拉的一道题 害不错

    (n)个电脑,管理员送达花费的时间是(a_i),管理员只能一个个用户地送电脑。用户安装程序花费的时间是(b_i),安排送电脑的顺序,使最晚安装完电脑的用户花费的时间最短

    有一个类似国王的游戏的贪心

    然后就是一些细节==

    统计儿子时要在递归完之后再来统计一遍

    int head[N],tot;
    struct edge{int v,nxt;}e[N<<1];
    void add(int u,int v){
    	e[++tot]=(edge){v,head[u]},head[u]=tot;
    	e[++tot]=(edge){u,head[v]},head[v]=tot;
    }
    int sz[N],son[N];
    bool cmp(int x,int y){return sz[x]-f[x]<sz[y]-f[y];}
    void dfs(int u,int ff){
    	if(u!=1) f[u]=a[u];
    	for(int i=head[u],v;i;i=e[i].nxt) if((v=e[i].v)!=ff) dfs(v,u);
    	son[0]=0;//sz[u]=1,
    	for(int i=head[u],v;i;i=e[i].nxt) if((v=e[i].v)!=ff) son[++son[0]]=v;
    	sort(son+1,son+son[0]+1,cmp);
    	for(int i=1;i<=son[0];++i) f[u]=Max(f[u],f[son[i]]+sz[u]+1),sz[u]+=sz[son[i]]+2;
    }
    
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in.txt","r",stdin);
    #endif
    	rd(n);
    	for(int i=1;i<=n;++i) rd(a[i]);
    	for(int i=1,u,v;i<n;++i) rd(u),rd(v),add(u,v);
    	dfs(1,0);
    	printf("%d",Max(f[1],sz[1]+a[1]));
        return 0;
    }
    
  • 相关阅读:
    MyISAM 和InnoDB 区别 转
    beautifulsoup
    爬虫学习
    python操作数据库
    爬虫
    python爬虫
    PHP中“简单工厂模式”实例讲解
    PERL 实现微信登录
    PERL 实现微信登录
    NLS_LANG SIMPLIFIED CHINESE_CHINA.AL32UTF8 和american_america.AL32UTF8
  • 原文地址:https://www.cnblogs.com/lxyyyy/p/11700601.html
Copyright © 2011-2022 走看看