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
  • 相关阅读:
    JavaScript使用技巧精萃
    小谈js事件
    更深入地了解H1N1型流感病毒
    Oracle的一些常用操作
    JS刷新页面
    asp.net Excel导入&导出(转)
    [转]我的敏捷开发实践
    汉字转全拼,简拼组件
    深度复制
    无法删除注册表健值
  • 原文地址:https://www.cnblogs.com/xkui/p/4553188.html
Copyright © 2011-2022 走看看