洛谷P2982 [USACO10FEB]慢下来Slowing down
2017-09-10 21:44
274 查看
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序上的操作 */ #include<iostream> #include<cstdio> using namespace std; #define maxn 100010 int n,num,head[maxn],dfn[maxn],cnt,sz[maxn],fa[maxn],L[maxn],R[maxn]; struct node{ int to,pre; }e[maxn*2]; struct Node{ int l,r,v; }tr[maxn<<4]; void Insert(int from,int to){ e[++num].to=to; e[num].pre=head[from]; head[from]=num; } void dfs(int now,int father){ L[now]=++cnt; for(int i=head[now];i;i=e[i].pre){ int to=e[i].to; if(to==father)continue; dfs(to,now); sz[now]+=sz[to]; } R[now]=cnt; } void build(int l,int r,int k){ tr[k].l=l;tr[k].r=r; if(l==r)return; int mid=(r+l)>>1; build(l,mid,k<<1); build(mid+1,r,k<<1|1); } int query(int x,int k){ if(tr[k].l==tr[k].r)return tr[k].v; int mid=(tr[k].l+tr[k].r)>>1; if(x<=mid)return tr[k].v+query(x,k<<1); return tr[k].v+query(x,k<<1|1); } void change(int l,int r,int k){ if(tr[k].l==l&&tr[k].r==r){ tr[k].v++; return; } int mid=(tr[k].l+tr[k].r)>>1; if(r<=mid)change(l,r,k<<1); else if(l>mid)change(l,r,k<<1|1); else change(l,mid,k<<1),change(mid+1,r,k<<1|1); } int main(){ scanf("%d",&n); int x,y; for(int i=1;i<n;i++){ scanf("%d%d",&x,&y); Insert(x,y); Insert(y,x); } dfs(1,1); build(1,n,1); for(int i=1;i<=n;i++){ scanf("%d",&x); printf("%d\n",query(L[x],1)); change(L[x],R[x],1); } return 0; }
相关文章推荐
- 洛谷 P2982 [USACO10FEB]慢下来Slowing down
- 线段树+Dfs序【p2982】[USACO10FEB]慢下来Slowing down
- 洛谷P2982 [USACO10FEB]慢下来Slowing down [2017年四月计划 树状数组01]
- 洛谷2982 USACO10FEB 慢下来 Slowing down
- 洛谷P2982 [USACO10FEB]慢下来Slowing down
- 洛谷 P2982 [USACO10FEB]慢下来Slowing down
- 洛谷——P2984 [USACO10FEB]给巧克力Chocolate Giving
- 洛谷P2983 [USACO10FEB]购买巧克力Chocolate Buying
- 洛谷—— P2983 [USACO10FEB]购买巧克力Chocolate Buying
- 洛谷P2983 [USACO10FEB]购买巧克力Chocolate Buying
- 洛谷P2984 [USACO10FEB]给巧克力Chocolate Giving
- 洛谷P3128 [USACO15DEC]最大流Max Flow
- 洛谷 P1203 [USACO1.1]坏掉的项链Broken Necklace
- 【洛谷 1218】[USACO1.5]特殊的质数肋骨 Superprime Rib
- P2985 [USACO10FEB]吃巧克力
- 【洛谷 3093】[USACO13DEC]牛奶调度Milk Scheduling
- 洛谷 P2338 [USACO14JAN]失败的滑雪Bessie Slows Down
- 洛谷—— P1849 [USACO12MAR]拖拉机Tractor
- (洛谷P1894)USACO 4.2 The Perfect Stall 完美的牛栏
- 洛谷P1215 [USACO1.4]母亲的牛奶 Mother's Milk