zoukankan      html  css  js  c++  java
  • HDU 6228 Tree

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=6228

    题意:给一个无根树,让你用k种颜色对树进行染色,求每种颜色形成的子树的最大公共边数量

    从答案考虑,在答案内的边一定左右两边都有k个及以上的节点,所以dfs一遍统计有多少个这样边就是答案

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #include<queue>
    #include<stack>
    #include<map>
    #include<set>
    using namespace std;
    const int N=2e5+5;
    vector<int> a[N];
    int s[N];
    void dfs(int x,int fa)
    {
        s[x]=1;
        for(int i=0;i<a[x].size();i++)
        {
            int t=a[x][i];
            if (t==fa) continue;
            dfs(t,x);
            s[x]+=s[t];
        }
    }
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int n,k;
            scanf("%d%d",&n,&k);
            for(int i=1;i<=n;i++)
                a[i].clear();
            memset(s,0,sizeof(s));
            for(int i=1;i<n;i++)
            {
                int x,y;
                scanf("%d%d",&x,&y);
                a[x].push_back(y);
                a[y].push_back(x);
            }
            dfs(1,0);
            int ans=0;
            for(int i=1;i<=n;i++)
                if (s[i]>=k&&n-s[i]>=k) ans++;
            printf("%d
    ",ans);
        }
        return 0;
    }
    

      

  • 相关阅读:
    初始化项目结构
    Django基础2
    Django基础
    Linux(9~)
    Linux(8~)
    redis案例
    Jedis连接池
    Jedis入门
    redis持久化
    redis命令操作
  • 原文地址:https://www.cnblogs.com/bk-201/p/8660445.html
Copyright © 2011-2022 走看看