zoukankan      html  css  js  c++  java
  • 洛谷P2982 [USACO10FEB]慢下来Slowing down

    题目描述

    Every day each of Farmer John's N (1 <= N <= 100,000) cows conveniently numbered 1..N move from the barn to her private pasture. The pastures are organized as a tree, with the barn being on pasture 1. Exactly N-1 cow unidirectional paths connect the pastures; directly connected pastures have exactly one path. Path i connects pastures A_i and B_i (1 <= A_i <= N; 1 <= B_i <= N).

    Cow i has a private pasture P_i (1 <= P_i <= N). The barn's small door lets only one cow exit at a time; and the patient cows wait until their predecessor arrives at her private pasture. First cow 1 exits and moves to pasture P_1. Then cow 2 exits and goes to pasture P_2, and so on.

    While cow i walks to P_i she might or might not pass through a pasture that already contains an eating cow. When a cow is present in a pasture, cow i walks slower than usual to prevent annoying her friend.

    
    Consider the following pasture network, where the number between
    parentheses indicates the pastures' owner.
    
            1 (3)        
           / 
      (1) 4   3 (5)
         /    
    (2) 2   5 (4)
    
    First, cow 1 walks to her pasture:
    
            1 (3)        
           / 
      [1] 4*  3 (5)
         /    
    (2) 2   5 (4)
    
    When cow 2 moves to her pasture, she first passes into the barn's
    pasture, pasture 1. Then she sneaks around cow 1 in pasture 4 before
    arriving at her own pasture.
    
            1 (3)
           / 
      [1] 4*  3 (5)
         /    
    [2] 2*  5 (4)
    
    Cow 3 doesn't get far at all -- she lounges in the barn's pasture, #1.
    
            1* [3]
           / 
      [1] 4*  3 (5)
         /    
    [2] 2*  5 (4)
    
    Cow 4 must slow for pasture 1 and 4 on her way to pasture 5:
    
            1* [3]
           / 
      [1] 4*  3 (5)
         /    
    [2] 2*  5* [4]
    
    Cow 5 slows for cow 3 in pasture 1 and then enters her own private pasture:
    
            1* [3]
           / 
      [1] 4*  3*[5]
         /    
    [2] 2*  5* [4]

    FJ would like to know how many times each cow has to slow down.

    每天Farmer John的N头奶牛(1 <= N <= 100000,编号1…N)从粮仓走向他的自己的牧场。牧场构成了一棵树,粮仓在1号牧场。恰好有N-1条道路直接连接着牧场,使得牧场之间都恰好有一条路径相连。第i条路连接着A_i,B_i,(1 <= A_i <= N; 1 <= B_i <= N)。 奶牛们每人有一个私人牧场P_i (1 <= P_i <= N)。粮仓的门每次只能让一只奶牛离开。耐心的奶牛们会等到他们的前面的朋友们到达了自己的私人牧场后才离开。首先奶牛1离开,前往P_1;然后是奶牛2,以此类推。

    当奶牛i走向牧场P_i时候,他可能会经过正在吃草的同伴旁。当路过已经有奶牛的牧场时,奶牛i会放慢自己的速度,防止打扰他的朋友。

    FJ想要知道奶牛们总共要放慢多少次速度。

    输入输出格式

    输入格式:

     

    • Line 1: Line 1 contains a single integer: N

    • Lines 2..N: Line i+1 contains two space-separated integers: A_i and B_i

    • Lines N+1..N+N: line N+i contains a single integer: P_i

     

    输出格式:

     

    • Lines 1..N: Line i contains the number of times cow i has to slow down.

     

    输入输出样例

    输入样例#1:
    5 
    1 4 
    5 4 
    1 3 
    2 4 
    4 
    2 
    1 
    5 
    3 
    
    输出样例#1:
    0 
    1 
    0 
    2 
    1 

    求dfs序,在dfs序数组上用树状数组统计差分前缀和即可。

     1 /*by SilverN*/
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<cmath>
     7 #include<vector>
     8 using namespace std;
     9 const int mxn=210000;
    10 int read(){
    11     int x=0,f=1;char ch=getchar();
    12     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    13     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
    14     return x*f;
    15 }
    16 vector<int>e[mxn>>1];
    17 int tlimit;
    18 int t[mxn];
    19 int n;
    20 void add(int x,int v){
    21     while(x<=tlimit){t[x]+=v;x+=x&-x;}
    22     return;
    23 }
    24 int smm(int x){
    25     int res=0;
    26     while(x){res+=t[x];x-=x&-x;}
    27     return res;
    28 }
    29 int in[mxn],out[mxn];
    30 int cnt=0;
    31 void dfs(int u,int fa){
    32     int i,j;
    33     in[u]=++cnt;
    34     for(i=0;i<e[u].size();i++){
    35         int v=e[u][i];
    36         if(v==fa)continue;
    37         dfs(v,u);
    38     }
    39     out[u]=++cnt;
    40 }
    41 int main(){
    42     n=read();
    43     tlimit=n*2+10;
    44     int i,j;int u,v;
    45     for(i=1;i<n;i++){
    46         u=read();
    47         v=read();
    48         e[u].push_back(v);
    49         e[v].push_back(u);
    50     }
    51     dfs(1,0);
    52     for(i=1;i<=n;i++){
    53         v=read();
    54         printf("%d
    ",smm(in[v]));
    55         add(in[v],1);
    56         add(out[v],-1);
    57     }
    58     return 0;
    59 }

    题目

    描述

    Every day

     

    each of Farmer John's N (1 <= N <= 100,000) cows conveniently numbered 1..N move from the barn to her private pasture. The pastures are organized as a tree, with the barn being on pasture 1. Exactly N-1 cow unidirectional paths connect the pastures; directly connected pastures have exactly one path. Path i connects pastures A_i and B_i (1 <= A_i <= N; 1 <= B_i <= N).

    Cow i has a private pasture P_i (1 <= P_i <= N). The barn's small door lets only one cow exit at a time; and the patient cows wait until their predecessor arrives at her private pasture. First cow 1 exits and moves to pasture P_1. Then cow 2 exits and goes to pasture P_2, and so on.

    While cow i walks to P_i she might or might not pass through a pasture that already contains an eating cow. When a cow is present in a pasture, cow i walks slower than usual to prevent annoying her friend.

    
    Consider the following pasture network, where the number between
    parentheses indicates the pastures' owner.
    
            1 (3)        
           / 
      (1) 4   3 (5)
         /    
    (2) 2   5 (4)
    
    First, cow 1 walks to her pasture:
    
            1 (3)        
           / 
      [1] 4*  3 (5)
         /    
    (2) 2   5 (4)
    
    When cow 2 moves to her pasture, she first passes into the barn's
    pasture, pasture 1. Then she sneaks around cow 1 in pasture 4 before
    arriving at her own pasture.
    
            1 (3)
           / 
      [1] 4*  3 (5)
         /    
    [2] 2*  5 (4)
    
    Cow 3 doesn't get far at all -- she lounges in the barn's pasture, #1.
    
            1* [3]
           / 
      [1] 4*  3 (5)
         /    
    [2] 2*  5 (4)
    
    Cow 4 must slow for pasture 1 and 4 on her way to pasture 5:
    
            1* [3]
           / 
      [1] 4*  3 (5)
         /    
    [2] 2*  5* [4]
    
    Cow 5 slows for cow 3 in pasture 1 and then enters her own private pasture:
    
            1* [3]
           / 
      [1] 4*  3*[5]
         /    
    [2] 2*  5* [4]

    FJ would like to know how many times each cow has to slow down.

    每天Farmer John的N头奶牛(1 <= N <= 100000,编号1…N)从粮仓走向他的自己的牧场。牧场构成了一棵树,粮仓在1号牧场。恰好有N-1条道路直接连接着牧场,使得牧场之间都恰好有一条路径相连。第i条路连接着A_i,B_i,(1 <= A_i <= N; 1 <= B_i <= N)。 奶牛们每人有一个私人牧场P_i (1 <= P_i <= N)。粮仓的门每次只能让一只奶牛离开。耐心的奶牛们会等到他们的前面的朋友们到达了自己的私人牧场后才离开。首先奶牛1离开,前往P_1;然后是奶牛2,以此类推。

    当奶牛i走向牧场P_i时候,他可能会经过正在吃草的同伴旁。当路过已经有奶牛的牧场时,奶牛i会放慢自己的速度,防止打扰他的朋友。

    FJ想要知道奶牛们总共要放慢多少次速度。

    输入输出格式

    输入格式:

     

    • Line 1: Line 1 contains a single integer: N

    • Lines 2..N: Line i+1 contains two space-separated integers: A_i and B_i

    • Lines N+1..N+N: line N+i contains a single integer: P_i

     

    输出格式:

     

    • Lines 1..N: Line i contains the number of times cow i has to slow down.

     

    输入输出样例

    输入样例#1:
    5 
    1 4 
    5 4 
    1 3 
    2 4 
    4 
    2 
    1 
    5 
    3 
    
    输出样例#1:
    0 
    1 
    0 
    2 
    1 
  • 相关阅读:
    Spring MVC(十六)--Spring MVC国际化实例
    Spring MVC(十五)--SpringMVC国际化配置项
    Spring MVC(十四)--SpringMVC验证表单
    Spring MVC(十三)--保存并获取属性参数
    Spring MVC(十二)--使用ModelView实现重定向
    Spring MVC(十一)--使用字符串实现重定向
    Spring MVC(十)--通过表单序列化传递参数
    Spring MVC(八)--控制器接受简单列表参数
    Spring MVC(七)--传递JSON参数
    接口限流算法总结
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/5894681.html
Copyright © 2011-2022 走看看