对并查集中的每一个节点的遍历问题(暴力方法)

来源:互联网 发布:uefi ubuntu 编辑:程序博客网 时间:2024/05/16 01:02

Work(Hdu :5326)

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 < n1 <= A, B <= n

Output
For each test case, output the answer as described above.
Sample Input

7 21 21 32 42 53 63 7

Sample Output

2
#include<cstdio>#include<cstring>#include<map>#include<vector>#include<cmath>#include<cstring>#include<iostream>#include<algorithm>#include<queue>#include<deque>#include<stack>using namespace std;int pp[101];int dum=0;int k;int fin(int x)//首先是查找节点的函数,在这里做了一些调整,在函数递归的过程中加入了一个计数器来记录符合条件的节点的出现次数,所以这个计数器定义成全局变量了{    if(x==k)    {        dum++;    }    if(x==pp[x]) return x;//其他还是一样    else    {        return fin(pp[x]);//关键点在这里:这里并没有进行路径压缩,这也是这种方法的弊端之一,就是不能进行路径压缩,应为要完整的保持灭个节点的完整性才能用这个方法一个一个节点的往上找,还好这道题的数据范围不是很大所以不进行路径压缩也不会超时    }}int joi(int x,int y){    int xx=fin(x);    int yy=fin(y);    if(xx!=yy) pp[y]=x;}int main(){    int n,m;    while(scanf("%d%d",&n,&m)==2)    {        for(int i=0;i<=n;i++) pp[i]=i;        for(int i=1;i<n;i++)        {            int a,b;            scanf("%d%d",&a,&b);            joi(a,b);        }        int sum=0;        for(k=1;k<=n;k++)//这里就开始暴力扫来匹配节点就行了        {            dum=0;            for(int j=1;j<=n;j++)            {               fin(j);            }            if(dum==m+1) sum++;        }        printf("%d\n",sum);    }}

PS.由于本人智力有限只能想到这种暴力的笨方法,这是一种效率极低的方法,有什么缺点尽管提出

0 0