zoukankan      html  css  js  c++  java
  • 2015 Multi-University Training Contest 3 1011(DFS)

    Work

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


    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
     
    Source
     
    题意:一个公司有N个人,输入管理的顺序,求管理K个人的管理人员有多少人
    分析:暴搜
    #include<cstdio>
    #include<string>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<stack>
    #include<queue>
    #include<vector>
    #include<map>
    #include<stdlib.h>
    #include<algorithm>
    #define LL __int64
    using namespace std;
    const int MAXN=100+5;
    int n,k,cnt,id;
    int g[MAXN][MAXN];
    int vv[MAXN],cc[MAXN];
    
    int DFS(int cur) 
    {
        cc[cur]=0;
        for(int i=1;i<=n;i++)
        {
            if(g[cur][i])
                cc[cur]+=DFS(i);
        }
        if(cc[cur]==k) cnt++;
        return cc[cur]+1;
    }
    int main()
    {
        //freopen("in.txt","r",stdin);
        while(scanf("%d %d",&n,&k)!=EOF)
        {
            memset(g,0,sizeof(g));
            memset(cc,0,sizeof(cc));
            memset(vv,0,sizeof(vv));
    
            for(int i=1;i<n;i++)
            {
                int st,en;
                scanf("%d %d",&st,&en);
                g[st][en]=1;
                vv[en]=1;
            }
    
            for(int i=1;i<=n;i++)
                if(!vv[i])
                {
                    id=i;
                    break;
                }            //找出根结点
    
            cnt=0;
            DFS(id);
            printf("%d
    ",cnt);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    LeetCode Find Duplicate File in System
    LeetCode 681. Next Closest Time
    LeetCode 678. Valid Parenthesis String
    LeetCode 616. Add Bold Tag in String
    LeetCode 639. Decode Ways II
    LeetCode 536. Construct Binary Tree from String
    LeetCode 539. Minimum Time Difference
    LeetCode 635. Design Log Storage System
    LeetCode Split Concatenated Strings
    LeetCode 696. Count Binary Substrings
  • 原文地址:https://www.cnblogs.com/clliff/p/4684684.html
Copyright © 2011-2022 走看看