• HDU6228 Tree


    本题是一个思维题,我们想到,如果一个边左右两侧的点都超过k个,那么他就可以用交集,不然的话就没有交集,因为会有一遍没法k个

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cmath>
    #include<vector>
    #include<string>
    #include<cstring>
    #include<map>
    #include<set>
    using namespace std;
    typedef long long ll;
    const int N=1e5+10;
    const int inf=0x3f3f3f3f;
    vector<int> m[N];
    int s[N];
    void dfs(int u,int fa){
        int i;
        s[u]=1;
        for(i=0;i<m[u].size();i++){
            if(m[u][i]==fa)
            continue;
            dfs(m[u][i],u);
            s[u]+=s[m[u][i]];
        }
    }
    int main(){
        int t;
        int n,k;
        cin>>t;
        while(t--){
            cin>>n>>k;
            memset(s,0,sizeof s);
            for(int i=1;i<=n;i++)
            m[i].clear();
            for(int i=0;i<n-1;i++){
                int u,v;
                scanf("%d%d",&u,&v);
                m[u].push_back(v);
                m[v].push_back(u);
            }
            dfs(1,-1);
            int ans=0;
            for(int i=1;i<=n;i++){
                if(s[i]>=k&&n-s[i]>=k)
                ans++;
            }
            printf("%d
    ",ans);
        } 
    }
    View Code
  • 相关阅读:
    mongodb的账户管理
    mongo备份与恢复
    mongo索引
    聚合aggregate
    07-【jsp基本了解】
    Servlet登录小案例
    06-【servletconfig、servletContext 】
    05-【session、cookie】
    jQuery
    04-【servlet转发和重定向】
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12325338.html
Copyright © 2020-2023  润新知