洛谷 P2982 [USACO10FEB]慢下来Slowing down

洛谷传送门

JDOJ 2684: USACO 2010 Feb Gold 3.Slowing down

JDOJ传送门

Description

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.

Input

* 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

Output

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

Sample Input

5 1 4 5 4 1 3 2 4 4 2 1 5 3

Sample Output

0 1 0 2 1

题目翻译

每天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想要知道奶牛们总共要放慢多少次速度。

题解:

dfs+树状数组。

题目大意:

在一棵树上,每个节点有点权,求每个节点的所有祖先中点权小于该节点的个数。

那么我们凭什么得出这个题目大意呢?这棵树的节点点权是啥啊?

很简单,通过读题可以发现这个点权其实可以算作奶牛到目标牧场的一个映射。每个点的点权就是它的奶牛的编号。这样一来题目大意就比较好理解了,这也是我们继续向下做题的基础。

然后我们考虑DFS,DFS的时候传两个参数,节点编号和其父亲节点。我们令1号节点(根节点)的父亲节点等于0。当然,你想令其得负的也可以。

我们一边搜索一边统计,因为我们深搜的时候节点遍历是有序的,所以我们每次搜索先向下查询再向上修改,就可以统计得出我们的答案。

这里要注意,因为我们存的是双向边,所以我们深搜的时候应该特判不要让它跑回去。

代码如下:

#include<cstdio>
using namespace std;
int n,c[100001],p[100001],ans[100001];
int tot,to[200001],nxt[200001],head[100001];
void add(int x,int y)
{
to[++tot]=y;
nxt[tot]=head[x];
head[x]=tot;
}
void fix(int x,int k)
{
for(int i=x;i<=n;i+=i&-i)
c[i]+=k;
}
int getsum(int x)
{
int ret=0;
for(int i=x;i;i-=i&-i)
ret+=c[i];
return ret;
}
void dfs(int x,int fa)
{
ans[p[x]]=getsum(p[x]);
fix(p[x],1);
for(int i=head[x];i;i=nxt[i])
{
if(to[i]==fa)
continue;
dfs(to[i],x);
}
fix(p[x],-1);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
p[x]=i;
}
dfs(1,0);
for(int i=1;i<=n;i++)
printf("%d\n",ans[i]);
return 0;
}

USACO Slowing down的更多相关文章

  1. BZOJ1782[USACO 2010 Feb Gold 3.Slowing down]——dfs+treap

    题目描述 每天Farmer John的N头奶牛(1 <= N <= 100000,编号1…N)从粮仓走向他的自己的牧场.牧场构成了一棵树,粮仓在1号牧场.恰好有N-1条道路直接连接着牧场, ...

  2. [ USACO 2010 FEB ] Slowing Down

    \(\\\) \(Description\) 给出一棵 \(N\) 个点的树和 \(N\) 头牛,每头牛都要去往一个节点,且每头牛去往的点一定互不相同. 现在按顺序让每一头牛去往自己要去的节点,定义一 ...

  3. USACO . Your Ride Is Here

    Your Ride Is Here It is a well-known fact that behind every good comet is a UFO. These UFOs often co ...

  4. 【USACO 3.1】Stamps (完全背包)

    题意:给你n种价值不同的邮票,最大的不超过10000元,一次最多贴k张,求1到多少都能被表示出来?n≤50,k≤200. 题解:dp[i]表示i元最少可以用几张邮票表示,那么对于价值a的邮票,可以推出 ...

  5. USACO翻译:USACO 2013 NOV Silver三题

    USACO 2013 NOV SILVER 一.题目概览 中文题目名称 未有的奶牛 拥挤的奶牛 弹簧牛 英文题目名称 nocow crowded pogocow 可执行文件名 nocow crowde ...

  6. USACO翻译:USACO 2013 DEC Silver三题

    USACO 2013 DEC SILVER 一.题目概览 中文题目名称 挤奶调度 农场航线 贝西洗牌 英文题目名称 msched vacation shuffle 可执行文件名 msched vaca ...

  7. USACO翻译:USACO 2014 DEC Silver三题

    USACO 2014 DEC SILVER 一.题目概览 中文题目名称 回程 马拉松 奶牛慢跑 英文题目名称 piggyback marathon cowjog 可执行文件名 piggyback ma ...

  8. USACO翻译:USACO 2012 FEB Silver三题

    USACO 2012 FEB SILVER 一.题目概览 中文题目名称 矩形草地 奶牛IDs 搬家 英文题目名称 planting cowids relocate 可执行文件名 planting co ...

  9. USACO翻译:USACO 2012 JAN三题(3)

    USACO 2012JAN(题目三) 一.题目概览 中文题目名称 放牧 登山 奶牛排队 英文题目名称 grazing climb lineup 可执行文件名 grazing climb lineup ...

随机推荐

  1. Salesforce 开发整理(七)配置审批流

    salesforce提供了比较强大的可配置审批流功能,在系统中翻译为“批准过程”.所以需要配置审批时,选择创建 ——>  工作流和批准 ——> 批准过程,然后选择管理批准过程,选择需要配置 ...

  2. AtCoder Grand Contest 036 简要题解

    从这里开始 比赛目录 Problem A Triangle 考虑把三角形移到和坐标轴相交,即 然后能够用坐标比较简单地计算面积,简单构造一下就行了. Code #include <bits/st ...

  3. Elasticsearch由浅入深(十一)索引管理

    索引的基本操作 创建索引 PUT /{index} { "settings": {}, "mappings": { "properties" ...

  4. Scala字符串插值 - StringContext

    翻译自:STRING INTERPOLATION 简介 自2.10.0版本开始,Scala提供了一种新的机制来根据数据生成字符串:字符串插值.字符串插值允许使用者将变量引用直接插入处理过的字面字符中. ...

  5. RabbitMQ操作代码封装

    1.Message.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...

  6. Zuul的高级使用

    原文链接:https://blog.csdn.net/u011820505/article/details/79373594

  7. tk.mybatis 中一直报...table doesn't exists

    首先检查你在实体类中可有加上@Table(name="数据库中的表名") 第二:如果你加了@Table注解, 那么只有一种可能就是.xml中定义了与通用mapper中的相同的方法名 ...

  8. DOM事件机制解惑(摘)--事件的传播机制

    DOM事件流 为什么是有事件流? 假如在一个button上注册了一个click事件,又在其它父元素div上注册了一个click事件,那么当我们点击button,是先触发父元素上的事件,还是button ...

  9. 2019-11-29-C#-字典-Dictionary-的-TryGetValue-与先判断-ContainsKey-然后-Get-的性能对比

    原文:2019-11-29-C#-字典-Dictionary-的-TryGetValue-与先判断-ContainsKey-然后-Get-的性能对比 title author date CreateT ...

  10. vue基础之data

    使用 调用data onLoad(option) { _self = this; _self.$data.xxxx = "te"; } 绑定节点 元素~~~~ <input ...