【USACO 2010FEB】 slowdown
【题目链接】
【算法】
dfs序 + 线段树
树链剖分同样可以解决这个问题
【代码】
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100010 int i,n,p,a,b,timer;
int tag[MAXN<<],sum[MAXN<<],size[MAXN],fa[MAXN],dfn[MAXN]; vector< int > e[MAXN]; inline void dfs(int u)
{
int i,v;
dfn[u] = ++timer;
size[u] = ;
for (i = ; i < e[u].size(); i++)
{
v = e[u][i];
if (fa[u] != v)
{
fa[v] = u;
dfs(v);
size[u] += size[v];
}
}
}
inline void pushdown(int index)
{
if (tag[index])
{
sum[index<<] += tag[index];
sum[index<<|] += tag[index];
tag[index<<] += tag[index];
tag[index<<|] += tag[index];
tag[index] = ;
}
}
inline void update(int index)
{
sum[index] = sum[index<<] + sum[index<<|];
}
inline void modify(int index,int l,int r,int ql,int qr,int val)
{
int mid;
if (l == ql && r == qr)
{
sum[index] += val;
tag[index] += val;
return;
}
pushdown(index);
mid = (l + r) >> ;
if (mid >= qr) modify(index<<,l,mid,ql,qr,val);
else if (mid + <= ql) modify(index<<|,mid+,r,ql,qr,val);
else
{
modify(index<<,l,mid,ql,mid,val);
modify(index<<|,mid+,r,mid+,qr,val);
}
update(index);
}
inline int query(int index,int l,int r,int pos)
{
int mid;
if (l == r) return sum[index];
pushdown(index);
mid = (l + r) >> ;
if (mid >= pos) return query(index<<,l,mid,pos);
else return query(index<<|,mid+,r,pos);
} int main() { scanf("%d",&n);
for (i = ; i < n; i++)
{
scanf("%d%d",&a,&b);
e[a].push_back(b);
e[b].push_back(a);
}
dfs();
for (i = ; i <= n; i++)
{
scanf("%d",&p);
printf("%d\n",query(,,n,dfn[p]));
modify(,,n,dfn[p],dfn[p]+size[p]-,);
} return ; }
【USACO 2010FEB】 slowdown的更多相关文章
- 【USACO 2857】 Steady Cow Assignment
[题目链接] 点击打开链接 [算法] 二分答案,check的时候跑最大流,即可 [代码] #include<bits/stdc++.h> using namespace std; #def ...
- 【USACO 2011】 道路和航线
[题目链接] 点击打开链接 [算法] SPFA + SLF / LLL 优化 [代码] #include<bits/stdc++.h> using namespace std; #defi ...
- 【USACO 2017FEB】 Why Did the Cow Cross the Road III
[题目链接] 点击打开链接 [算法] 树状数组 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 100010 ...
- 【USACO 2017Feb】 Why Did the Cow Cross the Road
[题目链接] 点击打开链接 [算法] dist[i][j][k]表示当前走到(i,j),走的步数除以3的余数为k的最小花费 spfa即可 [代码] #include<bits/stdc++.h& ...
- 【USACO 2008FEB】 旅馆
[题目链接] 点击打开链接 [算法] 线段树 对于一个节点,记录它从左端点延伸的最多的空房间的个数,从右端点延伸的最多的空房间个数,和该区间最多的连续 空房间个数 [代码] #include<b ...
- 【USACO Mar08】 奶牛跑步 A-star k短路
Description Bessie准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她只准备沿着下坡的路跑到池塘,然后走回牛棚. Bessie也不想跑得太远,所以她想走最短的路经. 农场上一共有M( ...
- 【cogs182】【USACO Jan07】均衡队形【st表】
题目描写叙述 农夫约翰的 N (1 ≤ N ≤ 50,000) 头奶牛,每天挤奶时总会按相同的顺序站好. 一日.农夫约翰决定为奶牛们举行一个"终极飞盘"比赛.为简化问题.他将从奶牛 ...
- 【USACO 2.1.1】城堡
[题目描述] 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张“幸运爱尔兰”(一种彩票).结果这张彩票让他获得了这次比赛唯一的奖品— ...
- 【USACO 1.1.1】你的飞碟在这儿
[问题描述] 一个众所周知的事实,在每一慧星后面是一个不明飞行物UFO. 这些不明飞行物时常来收集来自在地球上忠诚的支持者. 不幸地,他们的空间在每次旅行只能带上一群支持者. 他们要做的是用一种聪明的 ...
随机推荐
- 一次ORA-01555问题分析,及SQL优化。
前言 客户说: 我在数据库上继续运行昨日的脚本,但发现有个子过程在运行10个小时后报错: 烦请协助看看... 错误码是:ORA-01555: snapshot too old: rollback se ...
- 76-Bears/Bulls Power,熊力/牛力震荡指标.(2015.7.1)
Bears/Bulls Power 熊力/牛力震荡指标 Power,熊力/牛力震荡指标.(2015.7.1)" title="76-Bears/Bulls Power,熊力/牛力震 ...
- ICPC模板排版工具
感谢参考:https://www.cnblogs.com/palayutm/p/6444833.html 额外安装texlive, ubuntu环境提供参考: 1.下载镜像包 https://mirr ...
- java读utf8 的txt文件,第一个字符为空或问号问题
参考:https://blog.csdn.net/yangzhichao888/article/details/79529756 https://blog.csdn.net/wangzhi291/ar ...
- nyoj 86 找球号(一)(set,map)
找球号(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在某一国度里流行着一种游戏.游戏规则为:在一堆球中,每个球上都有一个整数编号i(0& ...
- add favorite & 收藏夹
add favorite // 收藏夹 function favorite (){ var ctrl = (navigator.userAgent.toLowerCase()).indexOf(&qu ...
- wangEditor
wangEditor 基于javascript和css开发的 Web富文本编辑器, 轻量.简洁.易用.开源免费 http://www.wangeditor.com/index.html API htt ...
- 前端开发:JQuery(1)
JQuery DOM文档加载的步骤: 1. 解析HTML结构: 2. 加载外部脚本和样式: 3. 解析并执行脚本代码: 4. DOM树构建完成: 5. 加载图片等外部文件: 6. 页面加载完成: JS ...
- JS基础:正则表达式
简介 正则表达式 (regular expression) 描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串.将匹配的子串做替换或者从某个字符串中取出符合某个条件的子串等.在 JS ...
- int *ptr=(int *)(&a+1)问题的探讨
从网络上看到这样一道有意思的题目,是关于数组与指针的问题,描述如下: main() { ]={,,,,}; ); printf(),*(ptr-)); } 输出为:2,5 请解释以上代码的输出结果. ...