zoukankan      html  css  js  c++  java
  • BZOJ 3391 Usaco2004 Dec Tree Cutting 网络破坏

    3391: [Usaco2004 Dec]Tree Cutting网络破坏

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 287  Solved: 211
    [Submit][Status][Discuss]

    Description

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

    Input

        第1行:一个整数N.
        第2到N+1行:每行输入两个整数,表示一条电缆的两个端点.

    Output

        按从小到大的顺序,输出所有值得破坏的牛棚.如果没有一个值得破坏,就输出“NONE”.

    Sample Input

    10
    1 2
    2 3
    3 4
    4 5
    6 7
    7 8
    8 9
    9 10
    3 8

    Sample Output

    3
    8

    如果牛棚3或牛棚8被破坏,剩下的三个子网节点数将是5,2,2,没有超过5的.
    来源信息

    HINT

    Source

    Silver

    建图后,首先我们强制以1为根,其实以哪个为根都无所谓了

    确定根后整个树的形状都确定了

    我们判断一个一个点是否可以破坏 这需要判断以这个点为根的每个子树大小是否小于等于n/2

    然后最后再判断除了所有子树剩余的和是否小于等于n/2,细节参考代码

    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    inline int read(){
        int x=0;int f=1;char ch=getchar();
        while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
        while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    const int MAXN=1e4+10;
    struct node{
        int y,next;
    }e[MAXN<<1];
    int linkk[MAXN<<1],len=0,n,m,ans=0,f[MAXN],ine[MAXN];
    inline void insert(int xx,int yy){
        e[++len].y=yy;e[len].next=linkk[xx];linkk[xx]=len;
    }
    void init(){
        n=read();
        for(int i=1;i<n;i++){
            int xx=read();int yy=read();insert(xx,yy);
            insert(yy,xx);
        }
    }
    inline void dp(int st,int fa){
        bool flag=0;
        f[st]=1;
        for(int i=linkk[st];i;i=e[i].next){
            if(e[i].y!=fa) {
                dp(e[i].y,st);
                f[st]+=f[e[i].y];
                if(f[e[i].y]>n/2) flag=1; 
            }
        }
        if(!flag&&f[st]>=n/2) ans++,ine[ans]=st;
    }
    int main(){
        init();
        dp(1,0);
        sort(ine+1,ine+ans+1);
        for(int i=1;i<=ans;i++){
            printf("%d
    ",ine[i]);
        }
        return 0;
    }
    

      

  • 相关阅读:
    Spring注入内部的Beans
    Spring基于Setter函数的依赖注入(DI)
    Jenkins中的Job配置里缺少“触发远程构建(例如,使用脚本)”选项的问题解决
    Spring基于构造函数的依赖注入(DI)
    音频中采样位数,采样率,比特率的名词解释(转)
    无损音乐知识收集3(转)
    无损音乐知识收集2(转)
    无损音乐知识收集1(转)
    Spring的依赖注入概述
    Spring的IoC容器概述
  • 原文地址:https://www.cnblogs.com/something-for-nothing/p/8056585.html
Copyright © 2011-2022 走看看