zoukankan      html  css  js  c++  java
  • HDU Problem 5326 Work 【并查集】

    Work

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 1665    Accepted Submission(s): 995

    Problem Description


    It’s an interesting experience to move from ICPC to work, end my college life and start a brand new journey in company.
    As is known to all, every stuff in a company has a title, everyone except the boss has a direct leader, and all the relationship forms a tree. If A’s title is higher than B(A is the direct or indirect leader of B), we call it A manages B.
    Now, give you the relation of a company, can you calculate how many people manage k people. 
     
    Input
    There are multiple test cases.
    Each test case begins with two integers n and k, n indicates the number of stuff of the company.
    Each of the following n-1 lines has two integers A and B, means A is the direct leader of B.

    1 <= n <= 100 , 0 <= k < n
    1 <= A, B <= n
     
    Output
    For each test case, output the answer as described above.
     
    Sample Input
    7 2 1 2 1 3 2 4 2 5 3 6 3 7
     
    Sample Output
    2
     
    Author
    ZSTU
     
    Source
     
    Recommend
    wange2014   |   We have carefully selected several similar problems for you:  5780 5779 5778 5777 5776 
     
    将树建好,从子节点依次往上加。顺便给 图片点一个赞。

    #include <bitsstdc++.h>
    #define MAX_N 105
    using namespace std;
    const int INF = 1e9;
    const double ESP = 1e-5;
    
    int par[MAX_N], num[MAX_N];
    int  n, k;
    void init() {
        for (int i = 0; i < 104; i++) {
            par[i] = i; num[i] = 0;
        }
    }
    void unite(int x, int y) {
        par[y] = x;
    }
    void solve(int x) {
        int t = x;
        while (t != par[t]) {
            num[par[t]]++;
            t = par[t];
        }
    }
    int main() {
        int a, b;
        while (scanf("%d%d", &n, &k) != EOF) {
            init(); int ans = 0;
            for (int i = 0; i < n - 1; i++) {
                scanf("%d%d", &a, &b);
                unite(a, b);
            }
            for (int i = 1; i <= n; i++) {
               solve(i);
            }
            for (int i = 1; i <= n; i++) {
                if (num[i] == k) ans++;
            }
            printf("%d
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    隔离级别
    分析Hello2代码
    正则表达式
    Filter and servlet
    部署描述符
    Annotation
    LDAP and Implementation
    Restful levels and Hateoas
    servlet injection analysis
    隔离级别
  • 原文地址:https://www.cnblogs.com/cniwoq/p/6770879.html
Copyright © 2011-2022 走看看