zoukankan      html  css  js  c++  java
  • BZOJ 4726: [POI2017]Sabota? 树形dp

    code: 

    #include <cstdio> 
    #include <string>  
    #include <algorithm>     
    #define N 500005 
    #define inf 0.0000000001
    using namespace std;   
    namespace IO { 
        void setIO(string s) 
        {
            string in=s+".in"; 
            string out=s+".out"; 
            freopen(in.c_str(),"r",stdin); 
            // freopen(out.c_str(),"w",stdout) 
        }
    };    
    double f[N];   
    double ans;        
    int n,k,edges; 
    int fa[N],hd[N],to[N],nex[N],size[N];  
    void add(int u,int v) 
    {
        nex[++edges]=hd[u],hd[u]=edges,to[edges]=v; 
    }    
    void dfs(int u) 
    {    
        f[u]=-1.0;      
        size[u]=1; 
        for(int i=hd[u];i;i=nex[i]) 
        {
            int v=to[i]; 
            dfs(v);   
            size[u]+=size[v];  
        }    
        int mx=0;
        for(int i=hd[u];i;i=nex[i]) 
        {
            int v=to[i]; 
            f[u]=max(f[u],min(f[v],(double)size[v]/(size[u]-1)));            // 最大比例   
            mx=max(mx,size[v]); 
        }
        if(f[u]==-1.0)  f[u]=N;                              
        if(size[u]>k)   ans=max(ans,f[u]==N?1.0:f[u]);              
    }
    int main() 
    { 
        // IO::setIO("input");  
        int i,j;   
        scanf("%d%d",&n,&k); 
        for(i=2;i<=n;++i)  scanf("%d",&fa[i]),add(fa[i],i);   
        ans=0.0; 
        dfs(1);   
        if(ans==0.0000000) printf("0
    ");               
        else printf("%.10f
    ",ans); 
        return 0; 
    }
    

      

  • 相关阅读:
    反编译工具
    3.25Java变量
    标识符
    OMS系统
    java打印方法区别
    注释
    写代码时候要注意的两个点
    python_pracyoce_day1
    SKU和SPU
    文档注释
  • 原文地址:https://www.cnblogs.com/guangheli/p/12094969.html
Copyright © 2011-2022 走看看