kafu
摘苹果什么的,怎么可以弯腰呢?
kafu 有着令人尴尬的身高和臂长,这导致她只能摘到与她的肩高 \(b\) 相差不超过其臂长 \(l\) 的范围内的苹果。而且,不是 kafu 的果树是她不能摘的。( \(l < b\) )
有时 kafu 会想要进行苹果的采摘,她会找来一个高度为 \(h\) 的板凳,板凳可以让她的身高临时增加 \(h\),这时她想知道她能摘到多少颗苹果以及苹果的总重量,但不会摘下这些苹果(不要在意这些细节,真摘下来不可做了!!!)。
开始时有 \(n\) 棵树,每棵树有 \(m\) 个节点,每个节点有 \(c\) 个苹果,苹果质量默认为 \(1\) ,每棵树有它自己的主人,树 \(i\) 的主人是 \(i\),其中 \(1\) 代表 kafu 。有时一些人会收购另一些人的树,这时两个人的树就会合并成为一个森林,并属于前一个人。
因为 kafu 是在是太可爱了!!!有时候有的人会想要让她来摘他的苹果, kafu 会在下一次的采摘的时候采摘他的果树和 kafu 自己的果树。//线段树合并
有的时候苹果会长大,这是正常现象,具体的讲,是第 \(a\) 棵树中高于 \(h1\) 低于 \(h2\) 的每个节点的每个苹果会增加 \(x\) 单位重量。//苹果重量增加
有的时候果树会长出新的苹果,这也是正常现象,具体的讲,是第 \(a\) 棵树中高于 \(h1\) 低于 \(h2\) 的每个节点都会增加 \(x\) 颗苹果。//苹果数量增加
有的时候某颗果树会死掉,那时候它将不会再有贡献(但也许还是会被买,谁知道呢)。//线段树减法
\(1 \le n \le 2\times 10^5\),\(\sum _{i = 1} ^n m <= 5\times 10^5\) ,\(h2 - h1 \le 10\) ,树或板凳的高度不超过 \(5 \times 10^5\)(单位自己猜)。对于一切计算,保证答案不超过 64位有符号整型范围。
tips: kafu 并没有这么高,臂长也没这么长。
tips: 每棵树根(1)的高度为1,height[son] = height[fa] + 1
关于输入
第一行为 \(4\) 个正整数 \(n\),\(m\),\(b\),\(l\)。
第一行有 n(树量),m(操作数),b, l, (见题意)
然后是 n 棵树 // ?
每组第一行是 siz(树大小)// n
然后一行 siz 个数是每个节点苹果个数 // c
第 3 行到第 siz + 1 行是边 // m
然后是 m 个以上操作
每行第一个数 opt
opt = 1 输入 h 摘苹果
opt = 2 合并树 输入 x y
opt = 3 邀请 kafu 输入 x
opt = 4 长大 输入 a h1 h2 x
opt = 5 变多 同上
opt = 6 死掉 输入 a
样例1:
2 6 3 1
7
1 1 2 1 1 1 1
1 2
1 3
3 4
4 5
4 6
4 7
6
1 1 1 2 1 1
1 2
1 3
2 4
2 5
4 6
2 1 2
1 0
4 1 1 2 1
1 1
4 1 3 4 1
1 1
11 13
7 8
7 12
样例2:
2 9 2 1
7
1 2 3 4 5 6 7
1 2
1 3
2 4
2 5
3 6
3 7
3
1 2 3
1 2
2 3
1 0
5 1 1 2 3
1 0
3 2
1 0
2 1 2
1 1
6 2
1 1
28 28
37 37
43 43
38 38
33 33
样例3:
2 4 1 0
4
1 1 1 1
1 2
2 3
2 4
3
1 1 1
1 2
2 3
1 0
3 2
6 2
1 0
1 1
1 1
样例4:
2 8 5 5
15
3422464681 2322377493 4021049779 2798319718 3045699424 4271709695 3998984033 1775837051 2061830931 4283400070 2831796874 2271986646 428175591 323198716 1910373442
2 1
3 2
4 3
5 4
6 1
7 5
8 3
9 7
10 6
11 4
12 10
13 8
14 2
15 6
15
928434893 3228646928 740387216 1318980971 604547647 1306458613 364196876 1208430950 3455212137 3407216698 2329199448 4040738362 3443520147 2238157601 3188622102
2 1
3 1
4 3
5 4
6 2
7 3
8 3
9 4
10 8
11 6
12 11
13 8
14 9
15 5
1 2
6 1
5 1 1 6 164
3 1
1 2
3 2
3 1
2 1 2
数据生成器:
#include<bits/stdc++.h>
#define int long long
#define Blue_Archive return 0
using namespace std;
const int mod = 1e5;
const int INF = 20000;
const int mid = 500;
int n;
int h;
int l;
int q;
bool vis[mod + 3];
bool die[mod + 3];
bool buy[mod + 3];
// vector<int> vis;
// vector<int> die;
// vector<int> buy;
mt19937 myrand(time(0));
signed main()
{
freopen("data.in","w",stdout);
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
n = 4e3;//2e5
h = myrand() % mod + 1;
l = myrand() % min(h,mod - h) + 1;
l = 5;
h = 5;
q = 4e4;
// for(int i = 1;i <= n;i ++)
// {
// vis.push_back(i);
// die.push_back(i);
// buy.push_back(i);
// }
cout << n << ' ' << q << ' ' << h << ' ' << l << '\n';
for(int i = 1,m = 125;i <= n;i ++)
{
cout << m << '\n';
for(int j = 1;j <= m;j ++) cout << myrand() % mid + 1 << ' ';
cout << '\n';
for(int i = 2,l;i <= m;i ++)//shengchengshu[max(1,i − 10),i)
{
l = max(1ll,i - 10ll);
cout << i << ' ' << myrand() % (i - l) + l << '\n';
}
}
for(int i = 1,op,x,y;i <= q;i ++)
{
op = myrand() % 100 + 1;
if(op <= 35)//35%
{
cout << 1 << ' ';
x = myrand() % 5 + 1;
cout << x << '\n';
}
else if(op <= 45)//10%
{
cout << 2 << ' ';
x = myrand() % n + 1;y = myrand() % n + 1;
while(y == x || buy[y]) y = myrand() % n + 1;
cout << x << ' ' << y << '\n';
buy[y] = 1;
vis[y] = 1;//这个人没树了
}
else if(op <= 60)//15%
{
cout << 3 << ' ';
x = myrand() % n + 1;
while(vis[x]) x = myrand() % n + 1;
cout << x << '\n';
}
else if(op <= 75)// id / h1 <= /h2 / val
{
cout << 4 << ' ';
x = myrand() % n + 1;
cout << x << ' ';
x = myrand() % n + 1;
y = x + myrand() % 11;
cout << x << ' ' << y << ' ';
cout << myrand() % mid + 1 << '\n';
}
else if(op <= 90)
{
cout << 5 << ' ';
x = myrand() % n + 1;
cout << x << ' ';
x = myrand() % n + 1;
y = x + myrand() % 11;
cout << x << ' ' << y << ' ';
cout << myrand() % mid + 1 << '\n';
}
else
{
cout << 6 << ' ';
x = myrand() % n + 1;
while(die[x]) x = myrand() % n + 1;
cout << x << '\n';
die[x] = 1;
}
}
Blue_Archive;
}
摘苹果什么的,怎么可以弯腰呢?
kafu 有着令人尴尬的身高和臂长,这导致她只能摘到与她的肩高 $b$ 相差不超过其臂长 $l$ 的范围内的苹果。而且,不是 kafu 的果树是她不能摘的。( $l < b$ )
有时 kafu 会想要进行苹果的采摘,她会找来一个高度为 $h$ 的板凳,板凳可以让她的身高临时增加 $h$,这时她想知道她能摘到多少颗苹果以及苹果的总重量,但不会摘下这些苹果(不要在意这些细节,真摘下来不可做了!!!)。
开始时有 $n$ 棵树,每棵树有 $m$ 个节点,每个节点有 $c$ 个苹果,苹果质量默认为 $1$ ,每棵树有它自己的主人,树 $i$ 的主人是 $i$,其中 $1$ 代表 kafu 。有时一些人会收购另一些人的树,这时两个人的树就会合并成为一个森林,并属于前一个人。
因为 kafu 是在是太可爱了!!!有时候有的人会想要让她来摘他的苹果, kafu 会在下一次的采摘的时候采摘他的果树和 kafu 自己的果树。//线段树合并
有的时候苹果会长大,这是正常现象,具体的讲,是第 $a$ 棵树中高于 $h1$ 低于 $h2$ 的每个节点的每个苹果会增加 $x$ 单位重量。//苹果重量增加
有的时候果树会长出新的苹果,这也是正常现象,具体的讲,是第 $a$ 棵树中高于 $h1$ 低于 $h2$ 的每个节点都会增加 $x$ 颗苹果。//苹果数量增加
有的时候某颗果树会死掉,那时候它将不会再有贡献(但也许还是会被买,谁知道呢)。//线段树减法
$1 \le n \le 2\times 10^5$,$\sum _{i = 1} ^n m <= 5\times 10^5$ ,$h2 - h1 \le 10$,树或板凳的高度不超过 $5 \times 10^5$(单位自己猜)。对于一切计算,保证答案不超过 64位有符号整型范围。
**tips: kafu 并没有这么高,臂长也没这么长。**
tips: 每棵树根(1)的高度为1,dep[son] = dep[fa] + 1
关于输入
第一行为 $4$ 个正整数 $n$,$m$,$b$,$l$。
第一行有 n(树量),m(操作数),b, l, (见题意)
然后是 n 棵树 // ?
每组第一行是 siz(树大小)// n
然后一行 siz 个数是每个节点苹果个数 // c
第 3 行到第 siz + 1 行是边 // m
然后是 m 个以上操作
每行第一个数 opt
opt = 1 输入 h 摘苹果
opt = 2 合并树 输入 x y
opt = 3 邀请 kafu 输入 x
opt = 4 长大 输入 a h1 h2 x
opt = 5 变多 同上
opt = 6 死掉 输入 a
/*
2 6 3 1 //查询区间为 [2,4]
7
1 1 2 1 1 1 1
1 2
1 3
3 4
4 5
4 6
4 7
6
1 1 1 2 1 1
1 2
1 3
2 4
2 5
4 6
2 1 2
1 0
4 1 1 2 1
1 1
4 1 3 4 1
1 1
*/
/*
11 13
7 8
7 12
*/

浙公网安备 33010602011771号