• 员工等级


    何老板的公司有n名员工,编号1到n。除了何老板以外,每个员工都有且仅有一名直接上司。每个员工可能有0个或
    多个直接下属。公司采取等级制度,等级越大的员工工资越低。何老板的工资最高,他的等级为1。每个员工的等
    级数都比他的直接上司的等级数大1。何老板向你提问,i号员工管辖的部门中,等级为k的有多少个人(包括i本人)
    i号员工管辖的部门包括i和i所有的直接或间接下属。何老板向你提了m次问题,你要快速回答出所有的提问。
    Input
    第一行,两个整数n和m
    接下来n-1行,每行两个整数,x和y,表示x是y的直接上司。
    接下来m行,每行一个整数i和k,表示一次提问。
    1<=n<=100000
    1<=m<=50000
    Output
    m行,对于每个提问,输出一行,一个整数,表示问题答案。
    Sample Input
    12 3
    3 1
    3 2
    3 4
    1 8
    1 5
    1 7
    2 6
    4 9
    6 11
    6 12
    5 10
    1 3
    2 4
    4 4
    Sample Output
    3
    2
    0

    #include<bits/stdc++.h>  
    using namespace std;  
    #define maxn 100005  
    int n,m;  
    int Next[maxn],End[maxn],Last[maxn];  
    int cnt;  
    int vis; 
    int dep[maxn]; 
    int in[maxn],ou[maxn]; 
    int f[maxn],ru[maxn]; 
    vector<int>q[maxn];
    vector<int>::iterator t1,t2;
    void dfs(int x) 
    { 
        int i,j,k; 
        dep[x]=dep[f[x]]+1;//x的等级为其父亲点等级加1 
        in[x]=++vis; 
        q[dep[x]].push_back(vis); 
    	//将dfs序也是被访问的时间加进vector,这个值是严格上升的
    	//cout<<"add  it  "<<dep[x]<<"    "<<vis<<endl;
        for(i=Last[x];i;i=Next[i])
        { 
            int en=End[i]; 
            f[en]=x; //en的父亲点为x 
            dfs(en); 
        } 
        ou[x]=vis; 
    } 
    void insert(int x,int y)  
    {  
        Next[++cnt]=Last[x];  
        Last[x]=cnt;  
        End[cnt]=y;  
    }  
    int main() 
    {  
        int i,j;  
        scanf("%d%d",&n,&m);  
        for(i=1;i<=n-1;i++)
        { 
            int x,y; 
            scanf("%d%d",&x,&y); 
            insert(x,y); 
            ru[y]++; 
        } 
        for(i=1;i<=n;i++) 
    	    if(!ru[i]) 
    		    dfs(i);
        for(i=1;i<=m;i++)
    	{
          int x,y;
          scanf("%d%d",&x,&y);
          int x1=in[x],y1=ou[x];
         
           t1=lower_bound(q[y].begin(),q[y].end(),x1);
           t2=upper_bound(q[y].begin(),q[y].end(),y1);
           //求出在时间范围为[x1,y1]进入到y这个向量中有多少个元素 
          cout<<t2-t1<<endl;    
        }    
    } 
    

      

  • 相关阅读:
    python ddt数据驱动框架
    yarn的安装和使用【转】
    辅助色选取思路
    echarts y轴起始坐标值设置
    mapbox 图层视角设置
    vue-cli2使用store存储全局变量
    vue 数组不响应解决办法
    echarts之dataZoom配置项【转】
    Vue中使用地图平台MapboxGL【转载】
    快速入门MapboxGL【转载】
  • 原文地址:https://www.cnblogs.com/cutemush/p/11794942.html
Copyright © 2020-2023  润新知