洛谷 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. Ubuntu安装微信、钉钉等各种windows软件

    详见这个博客,用sudo dpkg -i 安装软件时,如果出现错误,是因为缺少安装依赖关系,用下面的命令解决: sudo apt-get install -f

  2. oracle--状态查询

  3. Windows10 64位部署odoo12开发环境

    预装Windows10 64位家庭版电脑一台 2019年7月 安装Python,这里的版本选择上有个坑,不要装最新的Python 3.7.x,原因是odoo12依赖pillow 4.0.0库,而这个4 ...

  4. CentOS7 Hadoop 安装(完全分布式)

    一.hadoop集群安装模式   单机模式 直接解压,无需任何配置.主要用于测试代码.没有分布式文件系统.   伪分布式 完全分布式的一种形式,只是所有的进程都配置要一个节点上.有分布式文件系统,只不 ...

  5. SpringBoot第十七篇:定时任务

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11076555.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   相信大家对 ...

  6. SIFT提取特征

    SIFT特征提取: 角点检测: Morvavec角点检测算子:基于灰度方差的角点检测方法,该算子计算图像中某个像素点沿水平.垂直方向上的灰度差异,以确定角点位置 Harris角点检测算子:不止考察水平 ...

  7. logstash 对配置文件conf敏感信息,密码等加密

    logstash的配置文件conf经常会涉及敏感信息,比如ES,mysql的账户密码等,以下使用logstash导入mysql为例子,加密隐藏mysql的密码. 在向keystore中添加key及其s ...

  8. 【POI】java服务生成List数据集合,后台服务生成xlsx临时文件,并将临时文件上传到腾讯云上

    场景: java服务生成List数据集合,后台服务生成xlsx临时文件,并将临时文件上传到腾讯云上 今日份代码: 1.先是一个变量,作为文件名 private static final String ...

  9. C# LDAP认证登录类参考

    public class LDAPHelper     {         private DirectoryEntry _objDirectoryEntry;         /// <sum ...

  10. IEEE浮点表示 (原发布 csdn 2018-10-14 10:29:33)

    目录 观察IEEE浮点表示 工作中遇到过整型转浮点型(union那种转换),碰到就看下书,过后就遗忘了.等过段时间又出现此现象,又重新拿起书本,这次记录了过程.然而一直等到今天才写出来,以防以后还用到 ...