Codeforces Gym - 101147J Whistle's New Car
Discription
Whistle has bought a new car, which has an infinite fuel tank capacity.
He discovered an irregular country since it has n cities and there are exactly n - 1roads between them, of course, all cities are connected. He is so much clever, he realized that the country is like a rooted tree of n nodes and node 1 is the root. Each city i has only one filling station by which he can fill his car's fuel tank in no more than Xi liter. Whistle liked the country very much, and he wants to know what the most attractive city in the country is. The attractiveness of the city i is defined by how much it’s reachable from other cities, in other words the attractiveness of city is the number of cities j that satisfies these condition:
- City j is in the subtree of city i (except for city i itself).
- Whistle will start at city j and will only fill his car’s fuel tank with Xjliters and never fill it again until he reach city i.
- Whistle should be able to reach city i with non-negative fuel.
He knows the length of every road and that 1 Km will take exactly 1 liter on any road.
As you know, Whistle is very clever, but he is not that good at programming, so he asked you to help him. He wants to know the attractiveness of each city, so that he can decide which city to live in.
Input
The first line of input contains one integer T, the number of test cases.
The next line contains one integer (1 ≤ n ≤ 500, 000), The number of cities in the country.
The next line contains n integers (1 ≤ Xi ≤ 1, 000, 000, 000).
Each one of the next n - 1 line contains three integers A, B, C (1 ≤ A, B ≤ n and 1 ≤ C ≤ 1, 000, 000, 000), that means there is a road between city A and city B of length C.
Output
For each test case, output a line containing n integers, the attractiveness of each city.
Example
1
4
5 10 5 10
1 2 100
2 3 5
3 4 5
0 2 1 0
Note
Large I/O files. Please consider using fast input/output methods.
(为什么是文件输入标准输出hhhh,被坑了好久。。。)
每个点维护一个小根堆,往树上父亲合并的时候要先把这个堆都打个 -val_to_fa 的标记。因为涉及到合并和打标机,所以我们写一下左偏树就好啦。
最后每个点的答案就是 这个点的左偏树大小-1。
这个题还有树剖做法,,,虽然很好想(直接考虑每个点向上的影响就行了),但是因为跑的太慢而被我的可并堆艹爆hhhhh
于是我就成了GYM上第二快的人了hhhh(第一是个丧病各种写宏的毒瘤人士hhh)

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=500005;
int to[maxn*2],ne[maxn*2],val[maxn*2],num;
int siz[maxn],hd[maxn],L[maxn],ans[maxn];
int n,T,f[maxn],lc[maxn],rc[maxn];
ll W[maxn],tag[maxn];
inline void add(int x,int y,int z){ to[++num]=y,ne[num]=hd[x],hd[x]=num,val[num]=z;}
inline int read(){
int x=0; char ch=getchar();
for(;!isdigit(ch);ch=getchar());
for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
return x;
}
void Wt(int x){ if(x>=10) Wt(x/10); putchar(x%10+'0');}
inline void init(){ num=0,memset(hd,0,sizeof(hd));}
inline void update(int x,ll y){ tag[x]+=y,W[x]+=y;}
inline void pushdown(int x){
if(tag[x]){
if(lc[x]) update(lc[x],tag[x]);
if(rc[x]) update(rc[x],tag[x]);
tag[x]=0;
}
} int merge(int x,int y){
if(!x||!y) return x+y;
pushdown(x),pushdown(y); if(W[x]>W[y]) swap(x,y);
rc[x]=merge(rc[x],y),f[rc[x]]=x;
if(L[rc[x]]>L[lc[x]]) swap(lc[x],rc[x]);
L[x]=L[rc[x]]+1,siz[x]=siz[lc[x]]+siz[rc[x]]+1; return x;
} int DEL(int x){
pushdown(x),f[lc[x]]=f[rc[x]]=0;
return merge(lc[x],rc[x]);
} int dfs(int x,int fa){
int root=x,TO;
for(int i=hd[x];i;i=ne[i]) if(to[i]!=fa){
TO=dfs(to[i],x),update(TO,-val[i]);
while(W[TO]<0) TO=DEL(TO);
root=merge(root,TO);
} ans[x]=siz[root]-1;
return root;
} int main(){
freopen("car.in","r",stdin);
// freopen("data.out","w",stdout);
scanf("%d",&T);
while(T--){
int uu,vv,ww;
init(),scanf("%d",&n);
for(int i=1;i<=n;i++) W[i]=read(),tag[i]=lc[i]=rc[i]=L[i]=f[i]=0,siz[i]=1;
for(int i=1;i<n;i++) uu=read(),vv=read(),ww=read(),add(uu,vv,ww),add(vv,uu,ww);
dfs(1,-1);
for(int i=1;i<=n;i++) Wt(ans[i]),putchar(' ');
puts("");
}
return 0;
}
Codeforces Gym - 101147J Whistle's New Car的更多相关文章
- Gym - 101147J Whistle's New Car 树上差分
J. Whistle's New Car time limit per test 15 seconds memory limit per test 512 megabytes input car.in ...
- Gym 101147J Whistle's New Car(dfs)
https://vjudge.net/problem/Gym-101147J 题意: 有n个城市,每个城市有一个权值,表示在这个城市的加油站可以加多少油. 现在要计算每个城市i,有多少个城市j可以到达 ...
- 【树状数组】Gym - 101147J - Whistle's New Car
题意就是对每个点i,统计在其子树内(不含自身),且depj-depi<=xj的点有多少个. 把点分别按照dep-x和dep进行排序,离线处理, 每次把dep-x小于等于当前dep值的点插入树状数 ...
- Codeforces Gym 101252D&&floyd判圈算法学习笔记
一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...
- Codeforces Gym 101190M Mole Tunnels - 费用流
题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...
- Codeforces Gym 101623A - 动态规划
题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...
- 【Codeforces Gym 100725K】Key Insertion
Codeforces Gym 100725K 题意:给定一个初始全0的序列,然后给\(n\)个查询,每一次调用\(Insert(L_i,i)\),其中\(Insert(L,K)\)表示在第L位插入K, ...
- Codeforces gym 101343 J.Husam and the Broken Present 2【状压dp】
2017 JUST Programming Contest 2.0 题目链接:Codeforces gym 101343 J.Husam and the Broken Present 2 J. Hu ...
- codeforces gym 100553I
codeforces gym 100553I solution 令a[i]表示位置i的船的编号 研究可以发现,应是从中间开始,往两边跳.... 于是就是一个点往两边的最长下降子序列之和减一 魔改树状数 ...
随机推荐
- CUB reduce errorinvalid configuration argument
解决CUB reduce errorinvalid configuration argument问题 在写TensorFlow代码时遇到报错 CUB reduce errorinvalid confi ...
- loc与iloc函数的使用
Pandas中loc和iloc函数用法详解(源码+实例) https://blog.csdn.net/w_weiying/article/details/81411257 Pandas中loc,il ...
- python之路-双下方法
双下方法 定义: 双下方法是特殊方法,他是解释器提供的,由双下线加方法名加双下划线 __方法名__具有特殊意义的方法 双下方法主要是Python源码程序员使用的,元编程 我们在开发中尽量不要使用双下方 ...
- 做ios工程时,把UI从xib移动到代码中遇到的问题
由于四期要做多语言版本,带xib页面的工程做多语言版本比较麻烦,再加上现在已经习惯了代码中的viewdidload函数中初始化控件,所以就把两个页面从xib移到代码中去了. 在修改后加载页面会遇到ba ...
- The 2018 ACM-ICPC China JiangSu Provincial Programming Contest J. Set
Let's consider some math problems. JSZKC has a set A=A={1,2,...,N}. He defines a subset of A as 'Meo ...
- NOIP 2017 小凯的疑惑
# NOIP 2017 小凯的疑惑 思路 a,b 互质 求最大不能表示出来的数k 则k与 a,b 互质 这里有一个结论:(网上有证明)不过我是打表找的规律 若 x,y(设x<y) 互质 则 : ...
- Hadoop4.2HDFS测试报告之六
测试结论 第一组数据作表格作图: 第二组数据作表格作图: 根据以上图分析得出以下结论: 1. 本地存储的读写速率基本保持23M左右,说明本地存储比较稳定. 2. HDFS存储两个数据节点的读写速率性能 ...
- install and config redis on ubuntu14.04
1.installation: (1)download redis from http://redis.io/download (2)installation: $ tar -xvf redis-3. ...
- [git 学习篇] 关联github和本地创库
所以,github和本地创库是通过ssh传送,所以要将公钥拷贝到远程创库上(比如我ssh 远程服务器时,先将本地的公钥,拷贝到远程服务器的某个文件上(http://www.cnblogs.com/li ...
- [automator篇][9] 列表,找孩子
private boolean ClickByCollInfo(int CLICK, String classname, String id, String text) { UiSelector ui ...