zoukankan      html  css  js  c++  java
  • 【树形dp】Bzoj3391 [Usaco2004 Dec]Tree Cutting网络破坏

    Description

        约翰意识到贝茜建设网络花费了他巨额的经费,就把她解雇了.贝茜很愤怒,打算狠狠报
    复.她打算破坏刚建成的约翰的网络.    约翰的网络是树形的,连接着N(1≤N≤10000)个牛棚.她打算切断某一个牛棚的电源,使和这个牛棚相连的所有电缆全部中断.之后,就会存在若干子网络.为保证破坏够大,每一个子网的牛棚数不得超过总牛棚数的一半,那哪些牛棚值得破坏呢?
     

    Solution

    树形dp裸题,刷水好欢乐。

    Code

     1 #include<cstdio>
     2 const int maxn=1e5+5;
     3 
     4 int n,f[maxn],d[maxn];
     5 int head[maxn],e[maxn*2],nxt[maxn*2],cnt;
     6 int adde(int u,int v){
     7     e[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;
     8     e[++cnt]=u;nxt[cnt]=head[v];head[v]=cnt;
     9 }
    10 
    11 int dfs(int p,int u){
    12     d[u]=1;
    13     for(int i=head[u];i;i=nxt[i]){
    14         int v=e[i];
    15         if(v==p) continue;
    16         dfs(u,v);
    17         d[u]+=d[v];
    18         if(d[v]>n/2) f[u]=1;
    19     }
    20     if(n-d[u]>n/2) f[u]=1;
    21 }
    22 
    23 int main(){
    24     scanf("%d",&n);
    25     int u,v;
    26     
    27     for(int i=1;i<n;i++){
    28         scanf("%d%d",&u,&v);
    29         adde(u,v);
    30     }
    31     dfs(0,1);
    32 
    33     for(int i=1;i<=n;i++)
    34         if(!f[i]) printf("%d
    ",i);
    35     return 0;
    36 }
    View Code
  • 相关阅读:
    继承映射
    一对多,多对一,自关联的配置
    Spring 配置自动扫描spring bean配置
    Dao 处理
    2019暑假集训 括号匹配
    2019暑假集训 BLO
    2019暑假集训 Intervals
    2019暑假集训 平板涂色
    2019暑假集训 走廊泼水节
    0002-五层小山
  • 原文地址:https://www.cnblogs.com/xkui/p/4553188.html
Copyright © 2011-2022 走看看